返回列表 发帖

关于CXF+Spring发布webservice的问题

最近发现了用CXF+Spring整合发布webservice的一个疑难问题。
已《疯狂XML讲义》中的例子为例,见14.5节代码
如果webservice的接口与实现类是在同一个包里的话,生成的wsdl文件确实如书中所示,且使用wsdl2java工具生成客户端正常,
但如果接口与实现类不在同一个包里的话,生成的wsdl文件里就会多一个元素<wsdl:import />,导致wsdl2java解析不正常,

如下;
<wsdl:definitions name="firstWs" targetNamespace="http://lee.test/">
<wsdl:import location="http://localhost:8888/ssoclientapp/webservice/crazyit?wsdl=FirstWs.wsdl" namespace="http://kzy.lee.test/">
    </wsdl:import>

<wsdl:binding name="firstWsSoapBinding" type="ns1:FirstWs">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>

<wsdl:operation name="login">
<soap:operation soapAction="" style="document"/>

<wsdl:input name="login">
<soap:body use="literal"/>
</wsdl:input>

<wsdl:output name="loginResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="firstWs">

<wsdl:port binding="tns:firstWsSoapBinding" name="FirstWsImplPort">
<soap:address location="http://localhost:8888/ssoclientapp/webservice/crazyit"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>


请问能有什么方式可以使得<wsdl:import />元素不出现的吗?

另外,请问哪里有比较全的CXF与Spring整合的文档。

提问赏金:10金币
获奖名单 : 还未派发赏金

万里独行多陌路,一诗好赏便知音。

TOP

我这边一直用XFIRE的,只是现在 想进化一下,结果还是有问题。
现在用CXF发布的webservice,只有.net可以很正常解析,用vc、dephel、甚至java的wsdl2java都不能正常解析。。
真郁闷

TOP

原帖由 kzy 于 2010-9-6 10:54 发表
我这边一直用XFIRE的,只是现在 想进化一下,结果还是有问题。
现在用CXF发布的webservice,只有.net可以很正常解析,用vc、dephel、甚至java的wsdl2java都不能正常解析。。
真郁闷 ...


旧的项目换新的玩意,风险很大啊
万里独行多陌路,一诗好赏便知音。

TOP

万里独行多陌路,一诗好赏便知音。

TOP

原帖由 kzy 于 2010-9-6 00:02 发表
最近发现了用CXF+Spring整合发布webservice的一个疑难问题。
已《疯狂XML讲义》中的例子为例,见14.5节代码
如果webservice的接口与实现类是在同一个包里的话,生成的wsdl文件确实如书中所示,且使用wsdl2java工具生成客户 ...


今天上课刚刚讲过Web Service的接口和实现类不在同一个包中,一切正常。
你使用wsdl2java时候不要指定包。
生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

建议不要使用CXF 2.2.8版本
使用这个版本有一个问题:当使用定义转换器(XmlAdapter子类)
CXF 2.2.8引发一个IllegalArgumentException异常,具体原因未明。
使用《疯狂XML讲义》中介绍的CXF2.2.2版本,或使用最新的CXF2.2.10一切正常。
生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

我用的是2.2.9,这个问题已经解决了。
我在接口及实现类里都加上注解:@WebService(targetNamespace="http://webservice.test.kzy.com/")
这样即使是不在同一个包里,生成wsdl也正常。

各位可以尝试下。

当wsdl文件里有<wsdl:import/>时,如果这个时候将service端的服务器关闭,用wsdl2java生成代理类的时候,会报无法连接的错误的。

TOP

倚楼听风雨,笑看江湖路。。。

TOP

原帖由 kzy 于 2010-9-8 10:08 发表
我用的是2.2.9,这个问题已经解决了。
我在接口及实现类里都加上注解:@WebService(targetNamespace="http://webservice.test.kzy.com/")
这样即使是不在同一个包里,生成wsdl也正常。

各位可以尝试下。

当wsdl文件里有 ...


这个问题是肯定的。
因为你有<wsdl:import/>时,它需要导入远程的WSDL文件啊,
如果关闭了Web Service服务器端,那么被导入的WSDL文档将不可访问,那么使用wsdl2java时会有问题。

不过还有一个办法:你可以尝试把所有WDSL文档(自身、以及被包含的)都下载到本地,应该一切正常啊。
生命没有假期!
如果生命只剩下最后一秒,你可会想到我?

TOP

返回列表