我在soap中的cxf + WSClient有一些问题。

我正在用grails编写一个小工具,该工具必须对现有服务进行SOAP调用。

WSClient(groovyws-0.5.3-20100521.062225-1.jar)似乎是解决我的问题的完美解决方案。
但是,当我尝试实现对其中一项操作的调用时,遇到了两个问题。

问题#1调用某些操作时发生NullPointerException。

我已经找到了引发异常的代码

AbstractCXFWSClient.invokeMethod(String methodName, Object args)

     if (!operationToBeInvoked.isUnwrapped()){
                //Operation uses document literal wrapped style.
                inputMessageInfo = operationToBeInvoked.getWrappedOperation().getInput();
     } else {
                inputMessageInfo = operationToBeInvoked.getUnwrappedOperation().getInput();
            }

特别是operationToBeInvoked.getWrappedOperation(),我在单元测试中隔离了代码,发现operationToBeInvoked.getWrappedOperation()operationToBeInvoked.getWrappedOperation()都导致空对象。我试图弄清楚是什么原因引起的,但是我认为我已经不了解了。

问题2:WSClient.create(String classname)正在吃ClassNotFoundException(然后抛出NullPointerException)

基本上当我打以下电话时
def event = client.create("com.mypackage.MyBean");

我可以通过从浏览器浏览服务看到相同的bean。
<xs:complexType name="myBean">
<xs:sequence>
<xs:element minOccurs="0" name="id" type="xs:long"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="facets" nillable="true" type="tns:beanBean"/>
<xs:element minOccurs="0" name="sortId" type="xs:string"/>
<xs:element minOccurs="0" name="itemId" type="xs:string"/>
<xs:element minOccurs="0" name="preview" type="xs:boolean"/>
</xs:sequence>
</xs:complexType>

我得到了NPE。当我深入了解为什么获得NPE时,我发现它是因为WSClient上的类加载器找不到“com.mypackage.MyBean”而吃了ClassNotFoundException,然后不可避免地抛出了NPE。

编辑:我应该使用另一个客户端WSClient / cxf吗?我真的很想避免自己动手.....

最佳答案

基本上我没有找到答案。基本上,我基本上被迫卸载了两个插件和cxf,而没有使用常规的WSClient。

我所做的是为grails安装了ws-client插件,并且有效。

http://www.grails.org/plugin/ws-client

10-08 15:57