.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 クラスを生成する際に何か問題が発生したため、生成されたクラスが非常に汎用的になりましたか?Result
Fields
Fields
@XmlRootElement
Result
編集:マイケルのコメントで 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 クラスを生成する必要があります。