2011-09-14 22 views
5

私はオブジェクトを受け取るWebサーバメソッドを持っています。属性の1つは整数である「間隔」です。CXF - 属性を宣言するにはどうすればいいですか?

この属性は必須ですが、デフォルト値を指定しないでください。明示的に値を設定する必要があります。

int intervalを使用する場合、属性はintとして公開され、ユーザーが明示的に属性を設定しない場合は、0(Javaプリミティブintのデフォルト)が送信されます。

Integer intervalを使用する場合、その属性はIntegerとして公開されており、WSDLでは省略可能と宣言されているため、要求を送信する前にユーザーには表示されません。

または@XmlElement(nillable = false)Integer intervalを使用すると、属性はintとして公開されます。

属性には負、ゼロ、肯定の任意の整数を指定できます。したがって、属性が明示的に設定されていないことを示すデフォルト値は使用できません。

私はBigInteger interval@XmlElement(required = true)を使用できますが、コアタイプIntegerを使用する利点がありません。

私はこの属性をIntegerとして公開したいので、ユーザーが属性を設定していない場合にはnullを取得すると同時に、属性が必要であることをユーザーに知らせるWSDLを公開したいWSDLを調べるだけです。 @XmlElement(required = true)

答えて

3

WSDLは正しかったが、問題は私のWSDLにorg.apache.cxf.tools.wsdlto.WSDLToJavaツールを使用している場合、クライアントはint interval代わりのInteger intervalで に生成されたことでした。

ソリューションは、XSDをマップJAXBバインディングファイルへのパスでWSDL2Javaツールに「-b」オプションを渡すことです:java.lang.Integerにint型:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
      jaxb:version="2.0"> 
    <jaxb:globalBindings> 
    <jaxb:javaType name="java.lang.Integer" 
        xmlType="xsd:int" /> 
    </jaxb:globalBindings> 
</jaxb:bindings> 

@XmlElement(required = true)と「-b」を使用しますオプションで、必要な要素(minOccurs = "1")を保持し、IntegerとしてJavaクライアントに公開しました。

詳細情報:http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html

関連する問題