... I have generated JAXBC" /> ... I have generated JAXBC" /> ... I have generated JAXBC"/>

Hiding XML elements with nil="true" with JAXB

1.7k Views Asked by At

In my Response.xsd i have many elements like:

...
<xs:element type="xs:string" name="carModel" minOccurs="0">
</xs:element>
...

I have generated JAXBClasses from .xsd. Result:

    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(name = "", propOrder = {
        //...
        "carModel"
        //...
    })
    public static class Car{

    //...
    protected String carModel;
    //...getter and setters.

    }

Building my WebService response:

  Car car = new Car();
  //other params
  car.setCarModel(null); 

In generated response im getting:

 <ax23:carModel xsi:nil="true"/>

But i have expected completly no carModel tag at all. I want to skip it completly

What im doing wrong? Why null becomes nil when nillable = false by default.

Im not sure, is that what you were asking for @Xstian:

Part of my web.xml:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>
        org.apache.axis2.transport.http.AxisServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>

My WEB-INF/services/CarService/META-INF/services.xml:

<service name="CarService" >
<Description>
    Please Type your service description here
</Description>
<messageReceivers>
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
    <messageReceiver  mep="http://www.w3.org/2004/08/wsdl/in-out"  class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass" locked="false">com.foo.ws.CarService</parameter>
</service>
1

There are 1 best solutions below

6
Xstian On

Use this annotation @XmlElement(nillable=false)

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    //...
    "carModel"
    //...
})
public static class Car{

//...
@XmlElement(nillable=false)
protected String carModel;
//...getter and setters.

}