【问题标题】:generated Axis classes very generic, want to integrate generated JAX classes for XML result生成的 Axis 类非常通用,希望为 XML 结果集成生成的 JAX 类
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多