You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2007/09/17 23:06:35 UTC
svn commit: r576586 - in /incubator/cxf/trunk:
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/
rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/
systests/src/test/java/org/apache/cxf/systest/basicDOCBare/
systests/src/test/java/org/apach...
Author: dkulp
Date: Mon Sep 17 14:06:33 2007
New Revision: 576586
URL: http://svn.apache.org/viewvc?rev=576586&view=rev
Log:
[CXF-970] Patch from Jeff Yu applied.
Modified:
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/DOCBareClientServerTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/PutLastTradedPriceImpl.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHdrServiceImpl.java
incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/DocLitBareImpl.java
incubator/cxf/trunk/testutils/src/main/resources/wsdl/doc_lit_bare.wsdl
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/JAXBEncoderDecoder.java Mon Sep 17 14:06:33 2007
@@ -200,6 +200,27 @@
public static void marshall(JAXBContext context, Schema schema, Object elValue, Object source) {
marshall(context, schema, elValue, null, source, null);
}
+
+ @SuppressWarnings("unchecked")
+ public static void marshallNullElement(JAXBContext context, Schema schema,
+ Object source, MessagePartInfo part) {
+ Class<?> clazz = part != null ? (Class) part.getTypeClass() : null;
+ try {
+ Marshaller u = createMarshaller(context, clazz);
+ u.setSchema(schema);
+ try {
+ // The Marshaller.JAXB_FRAGMENT will tell the Marshaller not to
+ // generate the xml declaration.
+ u.setProperty(Marshaller.JAXB_FRAGMENT, true);
+ u.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
+ } catch (javax.xml.bind.PropertyException e) {
+ // intentionally empty.
+ }
+ writeObject(u, source, new JAXBElement(part.getElementQName(), clazz, null));
+ } catch (JAXBException e) {
+ throw new Fault(new Message("MARSHAL_ERROR", BUNDLE, e.getMessage()), e);
+ }
+ }
public static void marshall(JAXBContext context, Schema schema,
Object elValue,
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataWriterImpl.java Mon Sep 17 14:06:33 2007
@@ -41,6 +41,16 @@
|| !(part.getXmlSchema() instanceof XmlSchemaElement)) {
JAXBEncoderDecoder.marshall(getJAXBContext(), getSchema(), obj, part, output,
getAttachmentMarrshaller());
+ } else if (obj == null && needToRender(obj, part)) {
+ JAXBEncoderDecoder.marshallNullElement(getJAXBContext(), getSchema(), output, part);
}
+ }
+
+ private boolean needToRender(Object obj, MessagePartInfo part) {
+ if (part != null && part.getXmlSchema() instanceof XmlSchemaElement) {
+ XmlSchemaElement element = (XmlSchemaElement)part.getXmlSchema();
+ return element.isNillable() && element.getMinOccurs() > 0;
+ }
+ return false;
}
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/DOCBareClientServerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/DOCBareClientServerTest.java?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/DOCBareClientServerTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/DOCBareClientServerTest.java Mon Sep 17 14:06:33 2007
@@ -98,6 +98,20 @@
}
}
}
+
+ @Test
+ public void testNillableParameter() throws Exception {
+ URL wsdl = getClass().getResource("/wsdl/doc_lit_bare.wsdl");
+ assertNotNull("WSDL is null", wsdl);
+
+ SOAPService service = new SOAPService(wsdl, serviceName);
+ assertNotNull("Service is null", service);
+
+ PutLastTradedPricePortType port = service.getPort(portName,
+ PutLastTradedPricePortType.class);
+ String result = port.nillableParameter(null);
+ assertNull(result);
+ }
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/PutLastTradedPriceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/PutLastTradedPriceImpl.java?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/PutLastTradedPriceImpl.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/basicDOCBare/PutLastTradedPriceImpl.java Mon Sep 17 14:06:33 2007
@@ -18,6 +18,8 @@
*/
package org.apache.cxf.systest.basicDOCBare;
+import java.math.BigDecimal;
+
import javax.xml.ws.Holder;
import org.apache.hello_world_doc_lit_bare.PutLastTradedPricePortType;
@@ -43,6 +45,9 @@
public String bareNoParam() {
return "testResponse";
+ }
+ public String nillableParameter(BigDecimal theRequest) {
+ return null;
}
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHdrServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHdrServiceImpl.java?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHdrServiceImpl.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/outofband/header/OOBHdrServiceImpl.java Mon Sep 17 14:06:33 2007
@@ -19,6 +19,7 @@
package org.apache.cxf.systest.outofband.header;
+import java.math.BigDecimal;
import java.util.Iterator;
import java.util.List;
@@ -30,6 +31,7 @@
import javax.xml.ws.Holder;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
+
import org.w3c.dom.Node;
import org.apache.cxf.headers.Header;
@@ -42,6 +44,7 @@
+
@javax.jws.WebService(serviceName = "SOAPService",
portName = "SoapPort",
endpointInterface = "org.apache.hello_world_doc_lit_bare.PutLastTradedPricePortType",
@@ -140,6 +143,10 @@
public String bareNoParam() {
return "testResponse";
+ }
+
+ public String nillableParameter(BigDecimal theRequest) {
+ return null;
}
Modified: incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/DocLitBareImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/DocLitBareImpl.java?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/DocLitBareImpl.java (original)
+++ incubator/cxf/trunk/testutils/src/main/java/org/apache/hello_world_soap_http/DocLitBareImpl.java Mon Sep 17 14:06:33 2007
@@ -19,6 +19,8 @@
package org.apache.hello_world_soap_http;
+import java.math.BigDecimal;
+
import javax.jws.WebService;
import javax.xml.ws.Holder;
import org.apache.hello_world_doc_lit_bare.PutLastTradedPricePortType;
@@ -55,5 +57,9 @@
public int getBareNoParamCount() {
return bareNoParamCallCount;
+ }
+
+ public String nillableParameter(BigDecimal theRequest) {
+ return null;
}
}
Modified: incubator/cxf/trunk/testutils/src/main/resources/wsdl/doc_lit_bare.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/testutils/src/main/resources/wsdl/doc_lit_bare.wsdl?rev=576586&r1=576585&r2=576586&view=diff
==============================================================================
--- incubator/cxf/trunk/testutils/src/main/resources/wsdl/doc_lit_bare.wsdl (original)
+++ incubator/cxf/trunk/testutils/src/main/resources/wsdl/doc_lit_bare.wsdl Mon Sep 17 14:06:33 2007
@@ -29,6 +29,8 @@
<element name="in" type="tns:TradePriceData"/>
<element name="inout" type="tns:TradePriceData"/>
<element name="stringRespType" type="xsd:string"/>
+ <element name="inDecimal" nillable="true" type="xsd:decimal" />
+ <element name="outString" nillable="true" type="xsd:string" />
</schema>
</wsdl:types>
<message name="PutLastTradedPriceInput">
@@ -48,6 +50,14 @@
<message name="bareNoParamResponse">
<part element="x1:stringRespType" name="theResponse"/>
</message>
+
+ <message name="nillableRequest">
+ <part name="theRequest" element="x1:inDecimal" />
+ </message>
+
+ <message name="nillableResponse">
+ <part name="theResponse" element="x1:outString" />
+ </message>
<portType name="PutLastTradedPricePortType">
@@ -66,6 +76,11 @@
<output message="tns:bareNoParamResponse"/>
</operation>
+ <operation name="nillableParameter">
+ <input message="tns:nillableRequest" />
+ <output message="tns:nillableResponse" />
+ </operation>
+
</portType>
<binding name="PutLastTradedPriceSoapBinding" type="tns:PutLastTradedPricePortType">
@@ -96,7 +111,17 @@
<output>
<soap:body use="literal"/>
</output>
- </operation>
+ </operation>
+
+ <operation name="nillableParameter">
+ <input>
+ <soap:body use="literal" />
+ </input>
+ <output>
+ <soap:body use="literal" />
+ </output>
+ </operation>
+
</binding>
<wsdl:service name="SOAPService">
<wsdl:port name="SoapPort" binding="tns:PutLastTradedPriceSoapBinding">