2011-09-19 27 views
0

私のwebesrviceクライアントをAxisからAxis2-1.6.1に移行していますが、サービス自体は変更されません。私はWDSL2Javaによって生成されたコードに問題があります。なぜなら、「予期せぬサブ要素」例外が発生しているからです。私は、次のオプションを使用してソースコードを生成したAxis1 Axis2クライアントで非常に単純なサービスが呼び出されました。予期しないサブ要素の例外が発生しました

<wsdl:definitions targetNamespace="xml.generator.ws"> 
    <!--WSDL created by Apache Axis version: 1.4 
    Built on Apr 22, 2006 (06:55:48 PDT)--> 
    <wsdl:message name="generateToday1Request"> 
     <wsdl:part name="idCompany" type="xsd:string"/> 
    </wsdl:message> 
    <wsdl:message name="generateToday1Response"> 
     <wsdl:part name="generateToday1Return" type="xsd:dateTime"/> 
    </wsdl:message> 
    <wsdl:portType name="WSGenerator"> 
     <wsdl:operation name="generateToday1" parameterOrder="idCompany"> 
      <wsdl:input message="impl:generateToday1Request" name="generateToday1Request"/> 
      <wsdl:output message="impl:generateToday1Response" name="generateToday1Response"/> 
     </wsdl:operation> 
    </wsdl:portType> 
    <wsdl:binding name="ValuationsXMLGeneratorSoapBinding" type="impl:WSGenerator"> 
     <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> 
     <wsdl:operation name="generateToday1"> 
      <wsdlsoap:operation soapAction=""/> 
      <wsdl:input name="generateToday1Request"> 
       <wsdlsoap:body namespace="http://generacion.stmts.bpi.com" use="literal"/> 
      </wsdl:input> 
      <wsdl:output name="generateToday1Response"> 
       <wsdlsoap:body namespace="xml.generator.ws" use="literal"/> 
      </wsdl:output> 
     </wsdl:operation> 
    </wsdl:binding> 
    <wsdl:service name="WSGeneratorService"> 
     <wsdl:port binding="impl:ValuationsXMLGeneratorSoapBinding" name="ValuationsXMLGenerator"> 
      <wsdlsoap:address location="http://naboo:8080/Statements2/services/ValuationsXMLGenerator"/> 
     </wsdl:port> 
    </wsdl:service> 
</wsdl:definitions> 

<axis-wsdl2java 
    output="${src.java}" 
    testcase="false" 
    wsdlfilename="http://naboo:8080/Statements2/services/ValuationsXMLGenerator?wsdl" 
    serverside="false" 
    unpackclasses="true" 
    unwrap="true" 
    suppressprefixes="true" 
    namespacetopackages="xml.generator.ws=com.spb.eco.valuations.xml" 
    generateAllClasses="true"/> 

が唯一のサービスであり、それが唯一の文字列を受信して​​、日付を返しますので、WDSLは、非常に単純です私は、サービスを呼び出すために生成されたコードを使用して、次の体が送信されます。

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
    <generateToday1 xmlns="http://generacion.stmts.bpi.com"> 
    <idCompany xmlns="">US0010001</idCompany> 
    </generateToday1> 
</soapenv:Body> 
</soapenv:Envelope> 

そして私は、次の受信:

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
    <generateToday1Response xmlns="http://generacion.stmts.bpi.com"> 
    <generateToday1Return>2011-09-19T22:56:53.781Z</generateToday1Return> 
    </generateToday1Response> 
</soapenv:Body> 
</soapenv:Envelope> 

そしてこれは、サーバー用のserver-config.wsddです:

<?xml version="1.0" ?> 
<deployment 
    xmlns="http://xml.apache.org/axis/wsdd/" 
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
    <service name="ValuationsXMLGenerator" provider="java:RPC" style="rpc" use="literal"> 


     <!-- Nombre de la clase que implementa los metodos expuestos --> 
     <parameter name="className" value="com.bpi.stmts.generacion.WSGenerator"/> 

     <parameter name="allowedMethods" value="generateToday1"/> 
     <parameter name="wsdlTargetNamespace" value="xml.generator.ws"/> 
    </service> 

    <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/> 
    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/> 

    <transport name="http"> 
     <requestFlow> 
      <handler type="URLMapper"/> 
      <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> 
     </requestFlow> 
     <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/> 
     <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/> 
     <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> 
     <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> 
     <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/> 
     <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/> 
    </transport> 
    <transport name="local"> 
     <responseFlow> 
      <handler type="LocalResponder"/> 
     </responseFlow> 
    </transport> 

</deployment> 

それはもっと単純なことができませんでしたが、生成されたコードは、次の例外で失敗しますによって引き起こさ

: org.apache.axis2.databinding.ADBException:予期しないサブ要素この場合 {http://generacion.stmts.bpi.com} generateToday1Return

ない要素の注文に伴う問題、又はそのようなものは存在しません、だから私はあなたがいないクライアントが失敗している理由を説明してください。何か案は?

TIA

JL

答えて

0

問題は、SOAPバインディングのスタイルである、あなたのWSDLでは、あなたがスタイルとして "RPC" を使用している、Axis2のは、RPCをサポートしていません。私は同じ問題に直面しています。Axis1クライアントでWebサービスをテストしましたが、Axis2でも同じことが起こりました。

Later I have changed the SOAP binding style to DOCUMENT and then I have regenerated the client stubs with Axis2. After that I was able to invoke the Web Services successfully and got the proper response as well. 

So, Change the SOAP binding style to DOCUMENT. 
0

あなたはgenerateToday1Return要素の名前空間を持つべきではないWS-I基本プロファイルによります。しかし、レスポンスには名前空間があります。したがって、あなたの応答はwSDLファイルと一致しません。 詳細については、こちら[1]をご覧ください。

は、[1] http://wso2.org/library/2935

+0

ありがとうございます。それは変だ。 WSDLはサーバー上のAxis1によって自動的に生成されましたが(server-config.wsddを参照)、それが与える応答は独自のWSDLに準拠していませんか?私は、Axis1クライアントはそれほど厳格ではなかったので、失敗しなかったと思います。 Axis2へのサーバの変更はオプションではないので、どうすればこの問題を解決できますか?助言がありますか? –

+0

私はこれが古いことを知っていますが、私は今同じ問題を抱えています。 [このリンク]を試すことができます(http://wso2.com/library/knowledge-base/convert-rpc-encoded-wsdl-document-literal-wrapped-wsdl) –

関連する問題