2011-06-22 13 views
0

石鹸のcxf + WSClientにはいくつか問題があります。grails/groovyのWSClient石鹸クライアント

私は既存のサービスへのSOAP呼び出しを行う必要がある小さなツールをgrailsに書いています。

WSClient(groovyws-0.5.3-20100521.062225-1.jar)は私の問題の完璧な解決策のようでした。 しかし、私はアクションのいずれかの呼び出しを実装しようとすると私は2つの問題が発生します。

問題#1いくつかのアクションを呼び出すときにNullPointerExceptionが発生する。

Iは

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()を突き止めたIは、ユニットテストでコードを単離し、ヌルオブジェクトにおけるその両方operationToBeInvoked.getWrappedOperation()operationToBeInvoked.getWrappedOperation()結果を見つけました。私はそれを引き起こしているものを理解しようとしましたが、私は私の知識の終わりに達していると思います。

問題#2 WSClient.create(文字列のクラス名)は、ClassNotFoundExceptionが食べて(その後、NullPointerExceptionが投げ)さ

Basicly私は、次の呼び出し

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をスローするため、NPEを取得することができます。

編集:WSClient/cxfとは別のクライアントを使用する必要がありますか?私は本当に自分のロールバックすることを避けるために.....

答えて

2

基本的に私は答えを見つけることができませんでした。私は基本的に2つのプラグインとcxfをアンインストールし、groovy WSClientを使用しないようにしました。

私が何をしたのは、grails用のws-clientプラグインをインストールしたものです。

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

0

プロジェクト内のフォルダをプラグイン.grails libにCXFににJaxenのjarファイルを削除するようにしてください。あなたの問題を解決するはずです。