我继承了一个基于CXF的项目,具有以下(相关的)原始依赖项(在pom.xml中):
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.2.7</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-security</artifactId>
<version>2.2.7</version>
</dependency>和
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.2.8-SNAPSHOT</version>我所说的“原始”是指我在几年前收到的用于构建精细的源代码快照,这些年来一直处于休眠状态,而现在,需要对代码进行一些修改,它将不再按原样构建。
试图构建它的主要问题是,2.2.8-SNAPSHOT版本的cxf-codegen-plugin是无处可寻的.Maven找不到它并导致构建失败。
因此,我将上面的内容替换为(注意,惟一的区别是2.2.8比2.2.8-快照)
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.2.8</version>构建现在已经成功,但在没有找到的2个符号上失败:
Password.set_value(String value) --来自包裹org.oasis_open.docs.wss._2004._01.oasis_200401_wss_wssecurity_secext_1_0。SQLService.setENDPOINT(String sei)来自自己的包,基于javax.xml.ws.Service。Password和SQLService类的两个源文件都是由ApacheCXF2.2.8按本项目最初作者的设计动态生成的。
因此,我很快检查了这个文件的新生成版本,发现:
Password.set_value(String value)似乎已经被Password.setValue(String value)取代了。SQLService.setENDPOINT(String sei)已被完全消除,而是要求sei在构造函数:SQLService(URL wsdlLocation, QName serviceName)中传递。因此,我修改了调用这些方法的源代码,以适应这个看起来很小的变化,项目现在已经成功构建了!
但是.在运行时失败,但有以下例外:
WARNING: Interceptor for {http://rservice.rorg.net/sql}SQLService#{http://rservice.rorg.net/sql}Get has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
at $Proxy38.get(Unknown Source)
...
Caused by: java.net.ConnectException: ConnectException invoking http://localhost:8080/rservice/services/SQLServiceSoap: Connection refused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:522)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2058)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2043)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 14 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:413)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:274)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:261)
at java.net.Socket.connect(Socket.java:556)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:403)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:246)
at sun.net.www.http.HttpClient.New(HttpClient.java:320)
at sun.net.www.http.HttpClient.New(HttpClient.java:337)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:948)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:873)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1040)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1955)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1907)
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1974)
... 17 more
04-Jan-2013 12:07:17 ERROR [SQLModule] Error running SQL module: Could not send Message.
javax.xml.ws.WebServiceException: Could not send Message.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:135)
at $Proxy38.get(Unknown Source)
at net.rorg.rservice.client.base.sql.SQLClientBase.get(SQLClientBase.java:306)
at net.rorg.rservice.client.module.sql.SQLModule.getBatch(SQLModule.java:149)
at net.rorg.rservice.client.module.sql.SQLModule.getAndProcessSQL(SQLModule.java:110)
at net.rorg.rservice.client.module.sql.SQLModule.run(SQLModule.java:280)
at net.rorg.rservice.client.RClient.exec(RClient.java:398)
at net.rorg.rservice.client.RClient.run(RClient.java:173)
at net.rorg.rservice.client.RClient.main(RClient.java:166)
Caused by:
java.net.ConnectException: ConnectException invoking http://localhost:8080/rservice/services/SQLServiceSoap: Connection refused
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:67)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:522)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:2058)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:2043)
at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:487)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:313)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:265)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)
... 8 more
Caused by:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:413)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:274)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:261)
at java.net.Socket.connect(Socket.java:556)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:403)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:521)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:246)
at sun.net.www.http.HttpClient.New(HttpClient.java:320)
at sun.net.www.http.HttpClient.New(HttpClient.java:337)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:948)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:873)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1040)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1955)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1907)
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1974)
... 17 more注意:即使我硬编码WSDL中的实际(www)服务器URL (即用https://test.rserver.com替换http://localhost:8080 ),也会得到显示http://localhost:8080作为目标的ConnectException错误。显然,没有执行某些CXF-替换或解析。这会不会是问题所在的线索?CXF的哪个组件负责从http://localhost:8080到真实URL的神奇转换?
堆栈跟踪提示的位置正确吗(即JaxWsClientProxy、frontend.ClientProxy或.)?
at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:484)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:310)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:262)
at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:124)如果是的话,为什么会发生这种情况,我如何解决这个问题?
现在..。如果我是一个CXF和/或JAX专家,我可能已经找出了堆栈跟踪中误导性“连接拒绝”提示的根本原因。
但在这一点上,我几乎迷失了方向,因为我知道SEI确实存在,身份验证用户名/密码是正确的:旧的二进制文件(带有依赖项的JAR)对此服务运行良好。
因此,我正在寻找一个线索或一个专家的洞察力,他可能已经看到了这种类型的“拒绝连接”堆栈跟踪,并且知道它可能是由而不是 typical reasons触发的。例如,cxf-codegen-plugin 2.2.8快照被2.2.8替换后引入的某种类型的不匹配?
或有关如何解决此问题的其他提示?
发布于 2013-01-07 16:04:55
我想你改做SQLService可能是个问题
SQLService.setENDPOINT(String sei)已经完全消除,而是要求在构造函数中传递sei : SQLService(URL wsdlLocation,QName serviceName)。
您在构造函数调用中添加了新的URL吗?sei之前是什么?如果您输入了一个URL,很可能是它的连接失败了。您应该能够使用no构造函数。
如果您想在运行时设置URL (我猜这就是setENDPOINT调用所做的),则需要操作BindingProvider。请参阅此线程http://cxf.547215.n5.nabble.com/How-to-change-the-service-URL-at-runtime-td3242927.html
https://stackoverflow.com/questions/14199307
复制相似问题