0

したがって、Groovyを使用して通常のANTでは実行できない複雑な計算を処理するANTスクリプトがいくつかあります(少なくともafaik)。Groovy経由でSOAPエンベロープを使用してAxis2Webサービスにアクセスしようとしています。complexType2つの属性(1つは要求に、もう1つは応答に)を除いて、要求と応答は非常に単純です。

私が最初に出くわしたのはGroovySoapでした。使い方はとても簡単です。SoapClientをインスタンス化してWebサービスメソッドを呼び出すだけです。残念ながらcomplexType、リクエスト内の属性を処理できません。必要なものは次のとおりです。

現在の制限:

...。

4:現在のgroovy-1.0リリースでGroovy SOAPモジュールを使用している場合、クライアント側でカスタムデータ型を処理することはできません。

それから私はGroovyWSについてたくさん読みました。Grape構成ファイルを自分user.homeで作成しました。javacと$GROOVY_HOMEが使用可能です(基本的に、プロジェクトのクイックガイドページで説明されているようにすべてを実行しました)。私が最初にスクリプトを開始したとき、GrapeはどういうわけかIvyを取得しました(Grapeの経験はありませんが、Mavenに非常に似ていると思います)。

次に、簡単なスクリプトを開始しました。

@Grab(group='org.codehaus.groovy.modules', module='groovyws',version='0.5.2')
import groovyx.net.ws.WSClient
proxy = new WSClient("http://127.0.0.1/axis2/services/ReleaseService?wsdl", this.class.classLoader)
proxy.initialize()

残念ながら、Webクライアントを初期化することさえできませんでした(クラスパスにGroovy Soapライブラリがない場合)。

SEVERE: Could not compile java files for http://127.0.0.1/axis2/services/ReleaseService?wsdl.
Caught: java.lang.IllegalStateException: Unable to create JAXBContext for generated packages: Provider com.sun.xml.bind.v2.ContextFactory could not be instantiated: javax.xml.bind.JAXBException: "com.intershop.qa.tae.ws.xsd" doesnt contain ObjectFactory.class or jaxb.index java.lang.IllegalStateException: Unable to create JAXBContext for generated packages: Provider com.sun.xml.bind.v2.ContextFactory could not be instantiated [...]

私が持っているクラスパスにGroovySoapライブラリ(GroovyWSの機能の一部をオーバーロードしているようです)を使用すると、次のようになります。

Caught: java.lang.NoSuchMethodError: javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition; java.lang.NoSuchMethodError:

これは、最初にGroovySoapを使用していたときに発生したエラーと非常によく似ています。

だから私の質問は:complexType ANTを介してパラメータを使用してAxis2Webサービスと通信するにはどうすればよい私はGroovyだけに限定されていませんが、展開上の理由(最大50のVMスナップショット)のために、単純なものが必要です。Javaクライアントは機能しましたが、デプロイメントにはかなりの労力がかかるため(特に、将来的に変更したい場合)、ANTに近く、デプロイしやすいものが必要です。

GroovyWSの実装に関する他のテクノロジーの提案や修正のアイデアを事前に感謝します。

4

2 に答える 2

0

JDK 1.7 を使用しているときにも同様の問題がありました。JDK 1.6 に切り替えると解決しました。

于 2012-11-06T11:42:33.430 に答える
0

私は最終的に解決策を思いつきました: groovy-wslightは実際に私の問題を解決し、最終的に簡単にデプロイして、問題や例外なしで Web サービスにアクセスすることができました。

スクリプト:

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='0.7.1')
import wslite.soap.*
def client = new SOAPClient("http://127.0.0.1/axis2/services/ReleaseService")
def response = client.send  {
  body {
    myFunction(xmlns:"http://my.namespace.com") {
       stringParameter("6.3.0.0")
       status() { value("default") }
       mode() { value("full") }
    }
  }
}

wherestatusmodearecomplexTypesは、1 つの「値」属性で構成されています (例として)。

println(response.myFunctionResponse.return)

Web サービスから返されたオブジェクトを教えてくれます。もちろん、トークンの名前は WSDL によって異なります。私の場合、リクエストのレスポンスは と呼ばれmyFunctionResponse、フィールドがname="return"あり、オブジェクトを提供しcomplexTypeます。オブジェクトのフィールドは、WSDL で指定された名前に従って取得できます。

println(response.myFunctionResponse.return.location) // gives me the field value of the field "location" for my complexType
于 2012-10-09T14:20:56.127 に答える