0

xsd ファイルにクラス定義があります。JAXB バインディングを使用してクラスを生成しました。リストの場合、セッターはありません。

その後、このクラスを Web サービスで使用しました。サービス用に wsdl + xsd を作成しました。しかし... xsdにはフィールド定義がありません(リストの場合、これらのセッターがないため)。

クラスの wsdl + xsd を正しく生成するにはどうすればよいですか?

Netbeans 7.3.1 + グラスフィッシュ

サンプルコード: ベース 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フィールドのセッターはありません...

そして、私はそれをWebサービスで使用します:

@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>
4

1 に答える 1