生成的Axis类非常通用,希望为XML结果集成生成的JAX类

时间:2012-04-16 16:41:02

标签: java xml xml-serialization jaxb axis2

我使用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类。

1 个答案:

答案 0 :(得分:0)

迈克尔关于检查WSDL的评论指出了我正确的方向。我的几个Web方法只返回XmlDocument,因此WSDL对它们非常通用。我更改了Web方法以返回具有[Serializable]属性的自定义类,现在WSDL更具体,因此Axis生成的代码更具体。

相关问题