【发布时间】:2012-04-16 16:41:01
【问题描述】:
我使用基于 WSDL 的 Apache Axis 为 .NET SOAP Web 服务生成了很多类。为 Web 方法生成的方法返回 Result 类,这些类只有一些通用的 org.apache.axis.message.MessageElement[] 值。相反,我想要一个与 Web 方法返回的 XML 完全对应的 Result 类。我使用 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);
}
我能否以某种方式获取进入我的Result 类构造函数(它的唯一参数)的MessageElement[],并根据Fields 如何用@XmlRootElement 等注释来填充Fields 实例?还是在基于我的 .NET WSDL 生成 Apache Axis 类时出现问题,导致生成的 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 类。
【问题讨论】:
-
你有 WSDL 吗?从我在 AXIS 一代中使用的少量内容来看,它们确实根据合同中定义的任何内容创建,所以如果 WSDL 包含有问题的对象,它应该在那里。
标签: java xml xml-serialization jaxb axis2