2012-04-16 1 views
0

.NET SOAP Webサービス用のWSDLに基づいてApache Axisを使用して多くのクラスを生成しました。生成されたWebメソッドのメソッドは、org.apache.axis.message.MessageElement[]の値を持つResultクラスを返します。代わりに、Webメソッドが返すXMLに完全に対応するResultクラスが必要です。私は私のウェブのいずれかの方法で返されたXMLのためのXSDに基づいたカップルのJavaクラスを作成するためにJAXを使用し、それら生成されたクラスは、注釈を付けていると、私のXMLに一致する性質を持っている:Axisクラスが非常に汎用的で、XML結果のために生成されたJAXクラスを統合したい

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "content" 
}) 
@XmlRootElement(name = "fields") 
public class Fields { 
    @XmlValue 
    protected String content; 

    @XmlAttribute(required = true) 
    @XmlSchemaType(name = "anySimpleType") 
    protected String parameters; 

    public String getContent() { 
     return content; 
    } 

    public void setContent(String value) { 
     this.content = value; 
    } 

    public String getParameters() { 
     return parameters; 
    } 

    public void setParameters(String value) { 
     this.parameters = value; 
    } 
} 

私は上記のFieldsのようなJAXクラスをApache Axisが生成したResultクラスに統合しようとしています。私はこれについてどうやって行くのか分かりません。基づいて、私は何とか私のResultクラスのコンストラクタ(その唯一のパラメータ)に入ってくるMessageElement[]を取り、Fieldsインスタンスを読み込むことができ

public static org.apache.axis.encoding.Serializer getSerializer(
     java.lang.String mechType, java.lang.Class _javaType, 
     javax.xml.namespace.QName _xmlType) { 
    return new org.apache.axis.encoding.ser.BeanSerializer(_javaType, 
     _xmlType, typeDesc); 
} 
public static org.apache.axis.encoding.Deserializer getDeserializer(
     java.lang.String mechType, java.lang.Class _javaType, 
     javax.xml.namespace.QName _xmlType) { 
    return new org.apache.axis.encoding.ser.BeanDeserializer(_javaType, 
     _xmlType, typeDesc); 
} 

:Apache Axisの-生成されたクラスは役に立つかもしれない以下のメソッドを持っていますどのようにFields@XmlRootElementなどの注釈がついていますか?または、私の.NET WSDLに基づいてApache Axisクラスを生成するときに何かがうまくいかないため、生成されたResultクラスが非常に一般的なクラスになるでしょうか?

編集:マイケルさんのコメントは私がWSDLをチェックし、それがwsdl:typesでこのビットを持って作られた:

私は MyResultの見たすべての言及をだ、と complexType/ sequence/ anyはかなり一般的な見えること
<s:element name="MyResponse"> 
    <s:complexType> 
     <s:sequence> 
      <s:element minOccurs="0" maxOccurs="1" name="MyResult"> 
       <s:complexType mixed="true"> 
        <s:sequence> 
         <s:any/> 
        </s:sequence> 
       </s:complexType> 
      </s:element> 
     </s:sequence> 
    </s:complexType> 
</s:element> 

。たぶん私は.NET Webサービスでさらに何かをし、次にAxisでJavaクラスを生成する必要があります。

+1

WSDLはありますか? AXISの世代で使用したことはほとんどありませんが、契約で定義されているものに従ってWSDLを作成します.WSDLに問題のオブジェクトが含まれていると、そこに存在するはずです。 – Michael

答えて

0

WSDLのチェックに関するマイケルのコメントは正しい方向に私を指摘しました。私のWebメソッドのいくつかはちょうどXmlDocumentを返すので、WSDLは非常に一般的でした。 [Serializable]属性を持つカスタムクラスを返すようにWebメソッドを変更しました。これでWSDLがより具体化され、Axis生成コードがより具体化されました。

関連する問題