【问题标题】:Axis java to wsdl and complexType list轴 java 到 wsdl 和 complexType 列表
【发布时间】:2016-08-08 15:00:48
【问题描述】:

我目前面临实体和 WSDL 定义之间的 wsdl 不匹配问题。它似乎忽略了复杂类型的列表。我正在使用 Axis 2 从 XSD 文件生成的实体生成 WSDL。

这是 XSD 文件的一部分:

<xs:element name="Funds">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="Fund" maxOccurs="unbounded" minOccurs="0">
            <xs:complexType>
              <xs:sequence>
                <xs:element type="xs:string" name="code" />
                <xs:element type="xs:string" name="Status" />
              </xs:sequence>
            </xs:complexType>
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>

这会生成以下实体:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "fund"
})
public static class Funds {

    @XmlElement(name = "Fund")
    @XmlAnyElement(lax=true)
    protected List<Request.Funds.Fund> fund;

    public List<Request.Funds.Fund> getFund() {
        if (fund == null) {
            fund = new ArrayList<Request.Funds.Fund>();
        }
        return this.fund;
    }


    public void setFund(List<Request.Funds.Fund> fund) {
        this.fund = fund;
    }

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "code",
        "status"
    })
    public static class Fund {

        @XmlElement(name = "CODE", required = true)
        protected String code;
        @XmlElement(name = "Status", required = true)
        protected String status;

        public String getCODE() {
            return code;
        }

        public void setCODE(String value) {
            this.code = value;
        }

        public String getStatus() {
            return status;
        }

        public void setStatus(String value) {
            this.status = value;
        }
    }
}

这个生成的代码给出了以下 WSDL:

<xs:complexType name="Request_Funds">
<xs:sequence>
<xs:element minOccurs="0" name="fund" nillable="true" type="xs:anyType"/>
</xs:sequence>
</xs:complexType>

该列表被键入为 anyType 所以当它被解组时我得到以下错误:

 java.lang.ClassCastException: org.apache.axiom.om.impl.llom.OMElementImpl cannot be cast to com.legalsuite.services.start.importxml.Request$Funds$Fund

我可以做些什么来避免这种行为?

【问题讨论】:

    标签: java web-services xsd wsdl axis2


    【解决方案1】:

    由于您没有将Funds 声明为XmlElement,因此它不是您的WSDL 的一部分。它只是一个容器。

    我认为您应该明确声明 Funds,这样 WSDL 就不会混淆如下:

    @XmlElement(name = "Funds")
    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        "Fund"
    })
    public static class Funds {
    
        @XmlElement(name = "Fund")
        @XmlAnyElement(lax=true)
        protected List<Request.Funds.Fund> fund;
    
        public List<Request.Funds.Fund> getFund() {
            if (fund == null) {
                fund = new ArrayList<Request.Funds.Fund>();
            }
            return this.fund;
        }
    
    
        public void setFund(List<Request.Funds.Fund> fund) {
            this.fund = fund;
        }
    
        @XmlAccessorType(XmlAccessType.FIELD)
        @XmlType(name = "", propOrder = {
            "code",
            "status"
        })
        public static class Fund {
    
            @XmlElement(name = "CODE", required = true)
            protected String code;
            @XmlElement(name = "Status", required = true)
            protected String status;
    
            public String getCODE() {
                return code;
            }
    
            public void setCODE(String value) {
                this.code = value;
            }
    
            public String getStatus() {
                return status;
            }
    
            public void setStatus(String value) {
                this.status = value;
            }
        }
    }
    

    【讨论】:

    • 我试过了,但出现以下错误:“此位置不允许使用注释 @XmlElement”
    • 您是否从 XSD 生成 Java 类?
    • 是的,我是从上面的 XSD 生成的
    • 那么,你应该在 Funds 类上有注解。如果你这样做,你能分享一下它是什么吗?
    • 抱歉我一直赶时间,忘记复制Funds类上面的注解了。我已经编辑了代码并放置了它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多