我使用Apache Axis生成了许多基于WSDL的.NET SOAP Web服务的类。生成的Web方法的方法返回Result
类,这些类只有一些通用的org.apache.axis.message.MessageElement[]
值。我想要一个Result
类,它与Web方法返回的XML完全对应。我使用JAX为我的一个Web方法返回的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;
}
}
我现在正在尝试将JAX类(如上面的Fields
)集成到Apache Axis生成的Result
类中。我不知道怎么回事。 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[]
类构造函数中的Result
(唯一参数),并根据Fields
的实例填充Fields
实例用@XmlRootElement
等注释?或者在基于我的.NET WSDL生成Apache Axis类时出了什么问题,导致生成的Result
类如此通用?
编辑:Michael的评论让我检查了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类。
答案 0 :(得分:0)
迈克尔关于检查WSDL的评论指出了我正确的方向。我的几个Web方法只返回XmlDocument
,因此WSDL对它们非常通用。我更改了Web方法以返回具有[Serializable]
属性的自定义类,现在WSDL更具体,因此Axis生成的代码更具体。