簡體   English   中英

將生成的JAXB類與Web服務WSDL / XSD中的列表一起使用

[英]Use generated JAXB class with lists in web servise wsdl/xsd

我在xsd文件中有類定義。 我使用JAXB綁定生成了類。 對於列表,我沒有設置者。

之后,我在Web服務中使用了此類。 我創建了wsdl + xsd服務。 但是...在xsd中,我沒有任何字段定義(對於列表,因為我沒有這些設置方法)。

如何為我的班級正確生成wsdl + xsd?

Netbeans 7.3.1 + Glassfish

示例代碼:基本XSD:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:element name="A">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="B">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="FIELD1" type="xs:dateTime">
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

我做JAX綁定,所以它生成了類:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "b"
})
@XmlRootElement(name = "A")
public class A {

@XmlElement(name = "B", required = true)
protected List<A.B> b;

public List<A.B> getB() {
    if (b == null) {
        b = new ArrayList<A.B>();
    }
    return this.b;
}


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

    @XmlElement(name = "FIELD1", required = true)
    @XmlSchemaType(name = "dateTime")
    protected XMLGregorianCalendar field1;

    public XMLGregorianCalendar getFIELD1() {
        return field1;
    }

    public void setFIELD1(XMLGregorianCalendar value) {
        this.field1 = value;
    }
}

}

如您所見,b字段沒有設置器。

我在網絡服務中使用它:

@WebMethod(operationName = "hello")
public String hello(@WebParam(name = "name") A txt) {
    return "Hello " + txt + " !";
}

所以最后,我有wsdl + xsd,帶有A類,但是沒有字段:

  <xs:complexType name="a"><xs:sequence/>
  </xs:complexType>

JAXB不會為Collection生成setter。 您可以使用其getter訪問列表,然后使用list方法對其進行修改。

例:

txt.getB().add(new B());

來源:有關詳細信息,請參見此處

編輯由於評論:

經過對問題的進一步分析,我認為您正在尋找的是JiBX的BindGen工具 它是“用於從現有Java代碼生成綁定定義和匹配架構定義的工具”。

希望這可以幫助您進一步解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM