0

我使用基于 WSDL 的 Apache Axis 为 .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如上)集成到ResultApache 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[]进入我的类构造函数(它的唯一参数)中,并根据注释方式Result等填充 a实例吗?还是在基于我的 .NET WSDL 生成 Apache Axis 类时出现问题,导致生成的类如此通用?FieldsFields@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

Michael 关于检查 WSDL 的评论为我指明了正确的方向。我的一些 Web 方法刚刚返回XmlDocument,因此 WSDL 对它们非常通用。我更改了 Web 方法以返回具有[Serializable]属性的自定义类,现在 WSDL 更加具体,因此 Axis 生成的代码更加具体。

于 2012-04-17T14:34:10.350 回答