2011-09-14 7 views
5

Tengo un método de sericice web que recibe un objeto. Uno de los atributos es "intervalo" que es un número entero.CXF - ¿Cómo declarar un atributo requerido y no primitivo?

Me gustaría hacer este atributo requerido pero sin proporcionar ningún valor predeterminado: deseo que el usuario tenga que establecer un valor explícitamente.

Si uso int interval - el atributo se expone como int y si el usuario no establece explícitamente el atributo, se enviará un cero (valor predeterminado de Java para primitive int).

Si uso Integer interval - el atributo se expone como entero y se declara opcional en el WSDL para que el usuario no pueda verlo antes de enviar la solicitud.

Si uso Integer interval con o @XmlElement(nillable = false) - el atributo está expuesto como int.

El atributo puede tener cualquier número entero negativo, cero y positivo, por lo que no puedo usar un valor predeterminado para indicar que el atributo no se estableció explícitamente.

Puedo usar BigInteger interval con @XmlElement(required = true) pero nos faltan las ventajas de usar el tipo de núcleo Entero.

Me gustaría exponer el atributo como Entero así que obtendré nulo si el usuario no configuró el atributo y al mismo tiempo me gustaría que el WSDL exponga que el atributo es necesario para que los usuarios sepan que es necesario simplemente mirando el WSDL.

Respuesta

3

Con @XmlElement(required = true) el WSDL era correcta, pero el problema fue que cuando se utiliza la herramienta org.apache.cxf.tools.wsdlto.WSDLToJava en mi WSDL el cliente se generó con int interval en lugar de Integer interval.

La solución es pasar la opción "-b" a la herramienta wsdl2java con una ruta a un fijaciones JAXB presentar mapas que xsd: int a java.lang.Integer:

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

Usando @XmlElement(required = true) y el "B" opción, mantuvo el elemento requerido (minOccurs = "1") y lo expuso como un Entero al cliente de Java.

Más información: http://cxf.547215.n5.nabble.com/How-to-declare-an-attribute-required-and-non-primitive-td4815370.html

Cuestiones relacionadas