0

.NET SOAP Web サービスの WSDL に基づいて、Apache Axis を使用して多くのクラスを生成しました。Web メソッド用に生成されたメソッドは、Result一般的な値を持つクラスを返しorg.apache.axis.message.MessageElement[]ます。代わりにResult、Web メソッドが返す XML に完全に対応するクラスが必要です。JAX を使用して、Web メソッドの 1 つによって返された XML の XSD に基づいていくつかの Java クラスを作成しました。これらの生成されたクラスには注釈が付けられ、XML と一致するプロパティがあります。

@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 クラスResultを、Apache Axis が生成したクラスに統合しようとしています。どうすればいいのかわかりません。Apache Axis によって生成されたクラスには、次の便利なメソッドがあります。

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);
}

クラス コンストラクター (その唯一のパラメーター) にMessageElement[]入ってくるをどうにかして取得し、アノテーションの付け方などに基づいてインスタンスにデータを入力できますか? それとも、.NET WSDL に基づいて Apache Axis クラスを生成する際に何か問題が発生したため、生成されたクラスが非常に汎用的になりましたか?ResultFieldsFields@XmlRootElementResult

編集:マイケルのコメントで WSDL をチェックするようになりましたwsdl:types

<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>

それが私が見た言及のすべてMyResultであり、complexType/ sequence/anyはかなり一般的に見えます。たぶん、.NET Web サービスでさらに何かを行う必要があり、それから Axis で Java クラスを生成する必要があります。

4

1 に答える 1

0

WSDL のチェックに関する Michael のコメントは、私に正しい方向を示してくれました。私の Web メソッドのいくつかは を返すだけだっXmlDocumentたので、WSDL はそれらについて非常に一般的でした。属性を持つカスタム クラスを返すように Web メソッドを変更した[Serializable]ところ、WSDL がより具体的になり、Axis によって生成されたコードがより具体的になりました。

于 2012-04-17T14:34:10.350 に答える