首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2.2.8快照版本的cxf-codegen-plugin有什么特别之处?

2.2.8快照版本的cxf-codegen-plugin有什么特别之处?
EN

Stack Overflow用户
提问于 2013-01-07 15:49:59
回答 1查看 720关注 0票数 3

我继承了一个基于CXF的项目,具有以下(相关的)原始依赖项(在pom.xml中):

代码语言:javascript
复制
<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>

代码语言:javascript
复制
<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-快照)

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>2.2.8</version>

构建现在已经成功,但在没有找到的2个符号上失败:

  1. Password.set_value(String value) --来自包裹org.oasis_open.docs.wss._2004._01.oasis_200401_wss_wssecurity_secext_1_0
  2. SQLService.setENDPOINT(String sei)来自自己的包,基于javax.xml.ws.Service

PasswordSQLService类的两个源文件都是由ApacheCXF2.2.8按本项目最初作者的设计动态生成的。

因此,我很快检查了这个文件的新生成版本,发现:

  1. Password.set_value(String value)似乎已经被Password.setValue(String value)取代了。
  2. SQLService.setENDPOINT(String sei)已被完全消除,而是要求sei在构造函数:SQLService(URL wsdlLocation, QName serviceName)中传递。

因此,我修改了调用这些方法的源代码,以适应这个看起来很小的变化,项目现在已经成功构建了!

但是.在运行时失败,但有以下例外:

代码语言:javascript
复制
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或.)?

代码语言:javascript
复制
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替换后引入的某种类型的不匹配?

或有关如何解决此问题的其他提示?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14199307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档