You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by da...@apache.org on 2006/10/30 05:56:24 UTC
svn commit: r469066 [2/3] - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/databinding/
api/src/main/java/org/apache/cxf/service/model/
common/common/src/main/java/org/apache/cxf/configuration/spring/
common/common/src/test/java/org/apache/c...
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataReader.java Sun Oct 29 20:56:21 2006
@@ -19,13 +19,13 @@
package org.apache.cxf.jaxb.io;
-
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
public class EventDataReader implements DataReader<XMLEventReader> {
final JAXBDataReaderFactory factory;
@@ -38,16 +38,17 @@
return read(null, input);
}
- public Object read(QName name, XMLEventReader reader) {
- return read(name, reader, null);
+ public Object read(QName name, XMLEventReader input, Class type) {
+ return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(), factory.getSchema(), input, name,
+ type, null);
}
-
- public Object read(QName name, XMLEventReader reader, Class cls) {
- return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
- factory.getSchema(),
- reader,
- name,
- cls,
+
+ public Object read(MessagePartInfo part, XMLEventReader input) {
+ return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
+ factory.getSchema(),
+ input,
+ part,
null);
- }
+ }
+
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataWriter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataWriter.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/EventDataWriter.java Sun Oct 29 20:56:21 2006
@@ -19,12 +19,12 @@
package org.apache.cxf.jaxb.io;
-import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventWriter;
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.jaxb.JAXBDataWriterFactory;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
public class EventDataWriter implements DataWriter<XMLEventWriter> {
final JAXBDataWriterFactory factory;
@@ -37,19 +37,11 @@
write(obj, null, output);
}
- public void write(Object obj, QName elName, XMLEventWriter output) {
+ public void write(Object obj, MessagePartInfo part, XMLEventWriter output) {
if (obj != null) {
JAXBEncoderDecoder.marshall(factory.getJAXBContext(),
factory.getSchema(), obj,
- elName, output, null);
+ part, output, null);
}
}
- /*
- public void writeWrapper(ObjectMessageContext objCtx, boolean isOutBound, T output) {
- Object obj = callback.createWrapperType(objCtx, isOutBound);
- QName elName = isOutBound ? callback.getResponseWrapperQName()
- : callback.getRequestWrapperQName();
- write(obj, elName, output);
- }
- */
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataReader.java Sun Oct 29 20:56:21 2006
@@ -19,7 +19,6 @@
package org.apache.cxf.jaxb.io;
-import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamReader;
@@ -32,6 +31,7 @@
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
import org.apache.cxf.jaxb.attachment.JAXBAttachmentUnmarshaller;
import org.apache.cxf.message.Message;
+import org.apache.cxf.service.model.MessagePartInfo;
public class MessageDataReader implements DataReader<Message> {
@@ -45,11 +45,7 @@
return read(null, input);
}
- public Object read(QName name, Message input) {
- return read(name, input, null);
- }
-
- public Object read(QName name, Message input, Class cls) {
+ public Object read(MessagePartInfo part, Message input) {
JAXBAttachmentUnmarshaller au = null;
if (input.get(AttachmentDeserializer.class) != null) {
au = new JAXBAttachmentUnmarshaller(input);
@@ -71,20 +67,17 @@
return null;
}
Object o = JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
- factory.getSchema(), source,
- name,
- cls,
+ factory.getSchema(),
+ source,
+ part,
au);
- o = getValue(o);
-
return o;
}
- private Object getValue(Object o) {
- if (o instanceof JAXBElement) {
- return ((JAXBElement)o).getValue();
- }
- return o;
+ public Object read(QName name, Message input, Class type) {
+ // TODO Auto-generated method stub
+ return null;
}
+
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataWriter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataWriter.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/MessageDataWriter.java Sun Oct 29 20:56:21 2006
@@ -19,7 +19,6 @@
package org.apache.cxf.jaxb.io;
-import javax.xml.namespace.QName;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLStreamWriter;
@@ -30,7 +29,7 @@
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
import org.apache.cxf.jaxb.attachment.JAXBAttachmentMarshaller;
import org.apache.cxf.message.Message;
-
+import org.apache.cxf.service.model.MessagePartInfo;
public class MessageDataWriter implements DataWriter<Message> {
@@ -44,7 +43,7 @@
write(obj, null, output);
}
- public void write(Object obj, QName elName, Message output) {
+ public void write(Object obj, MessagePartInfo part, Message output) {
// if the mtom is enabled, we need to create the attachment mashaller
JAXBAttachmentMarshaller am = null;
if (output.containsKey(Message.MTOM_ENABLED)) {
@@ -52,15 +51,15 @@
am.setXOPPackage(true);
}
Object source = null;
- XMLStreamWriter xsw = (XMLStreamWriter) output.getContent(XMLStreamWriter.class);
+ XMLStreamWriter xsw = (XMLStreamWriter)output.getContent(XMLStreamWriter.class);
if (xsw != null) {
source = xsw;
} else {
- XMLEventWriter xew = (XMLEventWriter) output.getContent(XMLEventWriter.class);
+ XMLEventWriter xew = (XMLEventWriter)output.getContent(XMLEventWriter.class);
if (xew != null) {
source = xew;
} else {
- Node node = (Node) output.getContent(Node.class);
+ Node node = (Node)output.getContent(Node.class);
source = node;
}
}
@@ -69,9 +68,7 @@
}
if (obj != null) {
- JAXBEncoderDecoder.marshall(factory.getJAXBContext(), factory.getSchema(), obj, elName, source,
- am);
+ JAXBEncoderDecoder.marshall(factory.getJAXBContext(), factory.getSchema(), obj, part, source, am);
}
}
-
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataReader.java Sun Oct 29 20:56:21 2006
@@ -27,6 +27,7 @@
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
public class NodeDataReader implements DataReader<Node> {
final JAXBDataReaderFactory factory;
@@ -39,18 +40,21 @@
return read(null, input);
}
- public Object read(QName name, Node xmlNode) {
- return read(name, xmlNode, null);
- }
-
- public Object read(QName name, Node xmlNode, Class cls) {
+ public Object read(MessagePartInfo part, Node xmlNode) {
return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
factory.getSchema(),
xmlNode,
+ part,
+ null);
+ }
+
+ public Object read(QName name, Node input, Class type) {
+ return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
+ factory.getSchema(),
+ input,
name,
- cls,
+ type,
null);
}
-
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataWriter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataWriter.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/NodeDataWriter.java Sun Oct 29 20:56:21 2006
@@ -19,13 +19,12 @@
package org.apache.cxf.jaxb.io;
-import javax.xml.namespace.QName;
-
import org.w3c.dom.Node;
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.jaxb.JAXBDataWriterFactory;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
public class NodeDataWriter implements DataWriter<Node> {
final JAXBDataWriterFactory factory;
@@ -36,11 +35,11 @@
public void write(Object obj, Node output) {
write(obj, null, output);
}
- public void write(Object obj, QName elName, Node output) {
+ public void write(Object obj, MessagePartInfo part, Node output) {
if (obj != null) {
JAXBEncoderDecoder.marshall(factory.getJAXBContext(),
factory.getSchema(), obj,
- elName, output, null);
+ part, output, null);
}
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataReader.java Sun Oct 29 20:56:21 2006
@@ -35,6 +35,7 @@
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
+import org.apache.cxf.service.model.MessagePartInfo;
public class SOAPBodyDataReader implements DataReader<SOAPBody> {
final JAXBDataReaderFactory factory;
@@ -48,7 +49,7 @@
return null;
}
- public Object read(QName name, SOAPBody input) {
+ public Object read(MessagePartInfo part, SOAPBody input) {
// Complete
return null;
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataWriter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataWriter.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPBodyDataWriter.java Sun Oct 29 20:56:21 2006
@@ -21,7 +21,6 @@
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
-import javax.xml.namespace.QName;
import javax.xml.soap.SOAPBody;
import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
@@ -33,6 +32,7 @@
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.jaxb.JAXBDataWriterFactory;
+import org.apache.cxf.service.model.MessagePartInfo;
public class SOAPBodyDataWriter implements DataWriter<SOAPBody> {
protected SOAPBody dest;
@@ -76,7 +76,7 @@
- public void write(Object obj, QName elName, SOAPBody output) {
+ public void write(Object obj, MessagePartInfo part, SOAPBody output) {
// Complete
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPMessageDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPMessageDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPMessageDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/SOAPMessageDataReader.java Sun Oct 29 20:56:21 2006
@@ -33,6 +33,7 @@
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
+import org.apache.cxf.service.model.MessagePartInfo;
public class SOAPMessageDataReader implements DataReader<SOAPMessage> {
final JAXBDataReaderFactory factory;
@@ -46,8 +47,7 @@
return null;
}
- public Object read(QName name, SOAPMessage input) {
- // Complete
+ public Object read(MessagePartInfo part, SOAPMessage input) {
return null;
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLMessageDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLMessageDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLMessageDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLMessageDataReader.java Sun Oct 29 20:56:21 2006
@@ -39,6 +39,7 @@
import org.apache.cxf.helpers.XMLUtils;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
import org.apache.cxf.message.XMLMessage;
+import org.apache.cxf.service.model.MessagePartInfo;
public class XMLMessageDataReader implements DataReader<XMLMessage> {
final JAXBDataReaderFactory factory;
@@ -52,17 +53,11 @@
return null;
}
- public Object read(QName name, XMLMessage input) {
- // Complete
+ public Object read(MessagePartInfo part, XMLMessage input) {
+ // TODO Auto-generated method stub
return null;
}
- /**
- * @param name
- * @param input
- * @param type
- * @return
- */
public Object read(QName name, XMLMessage input, Class type) {
Object obj = null;
InputStream is = input.getContent(InputStream.class);
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataReader.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataReader.java Sun Oct 29 20:56:21 2006
@@ -25,6 +25,7 @@
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
public class XMLStreamDataReader implements DataReader<XMLStreamReader> {
final JAXBDataReaderFactory factory;
@@ -36,15 +37,14 @@
public Object read(XMLStreamReader input) {
return read(null, input);
}
-
- public Object read(QName name, XMLStreamReader reader) {
-
- return read(name, reader, null);
-
+ public Object read(MessagePartInfo part, XMLStreamReader reader) {
+ return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
+ factory.getSchema(), reader, part, null);
}
- public Object read(QName name, XMLStreamReader reader, Class cls) {
- return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(), factory.getSchema(), reader, name,
- cls, null);
+ public Object read(QName name, XMLStreamReader input, Class type) {
+ return JAXBEncoderDecoder.unmarshall(factory.getJAXBContext(),
+ factory.getSchema(), input, name, type, null);
}
+
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataWriter.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataWriter.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataWriter.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/XMLStreamDataWriter.java Sun Oct 29 20:56:21 2006
@@ -19,12 +19,12 @@
package org.apache.cxf.jaxb.io;
-import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamWriter;
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.jaxb.JAXBDataWriterFactory;
import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
public class XMLStreamDataWriter implements DataWriter<XMLStreamWriter> {
final JAXBDataWriterFactory factory;
@@ -37,12 +37,12 @@
write(obj, null, output);
}
- public void write(Object obj, QName elName, XMLStreamWriter output) {
+ public void write(Object obj, MessagePartInfo part, XMLStreamWriter output) {
if (obj != null) {
JAXBEncoderDecoder.marshall(factory.getJAXBContext(),
factory.getSchema(),
obj,
- elName,
+ part,
output,
null);
}
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareInInterceptorTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareInInterceptorTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareInInterceptorTest.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/BareInInterceptorTest.java Sun Oct 29 20:56:21 2006
@@ -47,7 +47,6 @@
assertEquals(1, parameters.size());
Object obj = parameters.get(0);
-
assertTrue(obj instanceof GreetMe);
GreetMe greet = (GreetMe)obj;
assertEquals("TestSOAPInputPMessage", greet.getRequestType());
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/JAXBEncoderDecoderTest.java Sun Oct 29 20:56:21 2006
@@ -48,10 +48,12 @@
import junit.framework.TestCase;
import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.staxutils.StaxStreamFilter;
import org.apache.cxf.testutil.common.TestUtil;
import org.apache.hello_world_soap_http.Greeter;
import org.apache.hello_world_soap_http.types.GreetMe;
+import org.apache.hello_world_soap_http.types.GreetMeResponse;
import org.apache.hello_world_soap_http.types.StringStruct;
import org.apache.type_test.doc.TypeTestPortType;
@@ -80,7 +82,11 @@
protected void setUp() throws Exception {
super.setUp();
- context = JAXBEncoderDecoder.createJAXBContextForClass(Greeter.class);
+ context = JAXBContext.newInstance(new Class[] {
+ GreetMe.class,
+ GreetMeResponse.class,
+ StringStruct.class
+ });
Method method = TestUtil.getMethod(Greeter.class, "greetMe");
wrapperAnnotation = method.getAnnotation(RequestWrapper.class);
@@ -95,13 +101,17 @@
public void testMarshallIntoDOM() throws Exception {
String str = new String("Hello");
QName inCorrectElName = new QName("http://test_jaxb_marshall", "requestType");
+ MessagePartInfo part = new MessagePartInfo(inCorrectElName, null);
+ part.setElement(true);
+ part.setElementQName(inCorrectElName);
+
SOAPFactory soapElFactory = SOAPFactory.newInstance();
Element elNode = soapElFactory.createElement(inCorrectElName);
assertNotNull(elNode);
Node node;
try {
- JAXBEncoderDecoder.marshall(context, null, null, inCorrectElName, elNode);
+ JAXBEncoderDecoder.marshall(context, null, null, part, elNode);
fail("Should have thrown a Fault");
} catch (Fault ex) {
//expected - not a valid object
@@ -111,7 +121,8 @@
obj.setRequestType("Hello");
QName elName = new QName(wrapperAnnotation.targetNamespace(),
wrapperAnnotation.localName());
- JAXBEncoderDecoder.marshall(context, null, obj, elName, elNode);
+ part.setElementQName(elName);
+ JAXBEncoderDecoder.marshall(context, null, obj, part, elNode);
node = elNode.getLastChild();
//The XML Tree Looks like
//<GreetMe><requestType>Hello</requestType></GreetMe>
@@ -128,10 +139,10 @@
//stringStruct.setArg0("hello");
stringStruct.setArg1("world");
// Marshal without the schema should work.
- JAXBEncoderDecoder.marshall(context, null, stringStruct, elName, elNode);
+ JAXBEncoderDecoder.marshall(context, null, stringStruct, part, elNode);
try {
// Marshal with the schema should get an exception.
- JAXBEncoderDecoder.marshall(context, schema, stringStruct, elName, elNode);
+ JAXBEncoderDecoder.marshall(context, schema, stringStruct, part, elNode);
fail("Marshal with schema should have thrown a Fault");
} catch (Fault ex) {
//expected - not a valid object
@@ -143,7 +154,10 @@
obj.setRequestType("Hello");
QName elName = new QName(wrapperAnnotation.targetNamespace(),
wrapperAnnotation.localName());
-
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
XMLOutputFactory opFactory = XMLOutputFactory.newInstance();
opFactory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, Boolean.TRUE);
@@ -151,7 +165,7 @@
//STARTDOCUMENT/ENDDOCUMENT is not required
//writer.add(eFactory.createStartDocument("utf-8", "1.0"));
- JAXBEncoderDecoder.marshall(context, null, obj, elName, writer);
+ JAXBEncoderDecoder.marshall(context, null, obj, part, writer);
//writer.add(eFactory.createEndDocument());
writer.flush();
writer.close();
@@ -174,7 +188,8 @@
public void testUnmarshallFromStax() throws Exception {
QName elName = new QName(wrapperAnnotation.targetNamespace(),
wrapperAnnotation.localName());
-
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+
InputStream is = getClass().getResourceAsStream("resources/GreetMeDocLiteralReq.xml");
XMLInputFactory factory = XMLInputFactory.newInstance();
XMLStreamReader reader =
@@ -186,7 +201,8 @@
//Remove START_DOCUMENT & START_ELEMENT pertaining to Envelope and Body Tags.
- Object val = JAXBEncoderDecoder.unmarshall(context, null, reader, elName, GreetMe.class);
+ part.setTypeClass(GreetMe.class);
+ Object val = JAXBEncoderDecoder.unmarshall(context, null, reader, part, null);
assertNotNull(val);
assertTrue(val instanceof GreetMe);
assertEquals("TestSOAPInputPMessage",
@@ -198,8 +214,12 @@
public void testMarshalRPCLit() throws Exception {
SOAPFactory soapElFactory = SOAPFactory.newInstance();
QName elName = new QName("http://test_jaxb_marshall", "in");
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+
SOAPElement elNode = soapElFactory.createElement(elName);
- JAXBEncoderDecoder.marshall(context, null, new String("TestSOAPMessage"), elName, elNode);
+ JAXBEncoderDecoder.marshall(context, null, new String("TestSOAPMessage"), part, elNode);
assertNotNull(elNode.getChildNodes());
assertEquals("TestSOAPMessage", elNode.getFirstChild().getFirstChild().getNodeValue());
@@ -220,22 +240,27 @@
QName elName = new QName(wrapperAnnotation.targetNamespace(),
wrapperAnnotation.localName());
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+ part.setTypeClass(Class.forName(wrapperAnnotation.className()));
+
SOAPElement elNode = getTestSOAPElement(elName);
String str = new String("Hello Test");
elNode.addChildElement("requestType").setValue(str);
-
Object obj = JAXBEncoderDecoder.unmarshall(context, null,
- elNode, elName, Class.forName(wrapperAnnotation.className()));
+ elNode, part, null);
assertNotNull(obj);
//Add a Node and then test
assertEquals(GreetMe.class, obj.getClass());
assertEquals(str, ((GreetMe)obj).getRequestType());
+ part.setTypeClass(String.class);
Node n = null;
try {
- JAXBEncoderDecoder.unmarshall(context, null, n, null, String.class);
+ JAXBEncoderDecoder.unmarshall(context, null, n, part, null);
fail("Should have received a Fault");
} catch (Fault pe) {
//Expected Exception
@@ -250,19 +275,24 @@
// <StringStruct><arg1>World</arg1></StringStruct>
// elNode = soapElFactory.createElement(elName);
// elNode.addNamespaceDeclaration("", elName.getNamespaceURI());
+
+ part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+ part.setTypeClass(Class.forName("org.apache.hello_world_soap_http.types.StringStruct"));
+
elNode = getTestSOAPElement(elName);
str = new String("World");
elNode.addChildElement("arg1").setValue(str);
// Should unmarshal without problems when no schema used.
- obj = JAXBEncoderDecoder.unmarshall(context, null, elNode, elName,
- Class.forName("org.apache.hello_world_soap_http.types.StringStruct"));
+ obj = JAXBEncoderDecoder.unmarshall(context, null, elNode, part, null);
assertNotNull(obj);
assertEquals(StringStruct.class, obj.getClass());
assertEquals(str, ((StringStruct)obj).getArg1());
+
try {
// unmarshal with schema should raise exception.
- obj = JAXBEncoderDecoder.unmarshall(context, schema, elNode, elName,
- Class.forName("org.apache.hello_world_soap_http.types.StringStruct"));
+ obj = JAXBEncoderDecoder.unmarshall(context, schema, elNode, part, null);
fail("Should have thrown a Fault");
} catch (Fault ex) {
// expected - schema validation should fail.
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/TestBase.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/TestBase.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/TestBase.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/TestBase.java Sun Oct 29 20:56:21 2006
@@ -24,6 +24,7 @@
import java.lang.reflect.Method;
import java.util.ArrayList;
+import javax.xml.bind.JAXBContext;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
@@ -37,9 +38,7 @@
import org.apache.cxf.binding.BindingFactoryManager;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointImpl;
-import org.apache.cxf.greeter_control.types.GreetMe;
import org.apache.cxf.interceptor.Interceptor;
-import org.apache.cxf.interceptor.WrappedInInterceptor;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.ExchangeImpl;
import org.apache.cxf.message.MessageImpl;
@@ -51,7 +50,8 @@
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.cxf.staxutils.StaxUtils;
import org.apache.cxf.wsdl11.WSDLServiceFactory;
-import org.apache.hello_world_soap_http.Greeter;
+import org.apache.hello_world_soap_http.types.GreetMe;
+import org.apache.hello_world_soap_http.types.GreetMeResponse;
import org.easymock.classextension.IMocksControl;
import static org.easymock.EasyMock.expect;
@@ -91,11 +91,17 @@
service = factory.create();
endpointInfo = service.getServiceInfo().getEndpoint(new QName(ns, "SoapPort"));
endpoint = new EndpointImpl(bus, service, endpointInfo);
- service.setDataBinding(new JAXBDataBinding(Greeter.class));
+ JAXBDataBinding db = new JAXBDataBinding();
+ db.setContext(JAXBContext.newInstance(new Class[] {
+ GreetMe.class,
+ GreetMeResponse.class
+ }));
+ service.setDataBinding(db);
operation = endpointInfo.getBinding().getOperation(new QName(ns, "greetMe"));
- operation.getOperationInfo().getUnwrappedOperation()
- .getInput().setProperty(WrappedInInterceptor.WRAPPER_CLASS, GreetMe.class);
+ operation.getOperationInfo().getInput().getMessagePartByIndex(0).setTypeClass(GreetMe.class);
+ operation.getOperationInfo().getOutput()
+ .getMessagePartByIndex(0).setTypeClass(GreetMeResponse.class);
message = new MessageImpl();
Exchange exchange = new ExchangeImpl();
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataReaderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataReaderTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataReaderTest.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataReaderTest.java Sun Oct 29 20:56:21 2006
@@ -31,13 +31,10 @@
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.jaxb.JAXBDataReaderFactory;
-import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.staxutils.StaxStreamFilter;
-import org.apache.hello_world_doc_lit_bare.PutLastTradedPricePortType;
import org.apache.hello_world_doc_lit_bare.types.TradePriceData;
-import org.apache.hello_world_rpclit.GreeterRPCLit;
import org.apache.hello_world_rpclit.types.MyComplexStruct;
-import org.apache.hello_world_soap_http.Greeter;
import org.apache.hello_world_soap_http.types.GreetMe;
import org.apache.hello_world_soap_http.types.GreetMeResponse;
@@ -56,7 +53,7 @@
}
public void testReadWrapper() throws Exception {
- JAXBDataReaderFactory rf = getTestReaderFactory(Greeter.class);
+ JAXBDataReaderFactory rf = getTestReaderFactory(GreetMe.class);
reader = getTestReader("../resources/GreetMeDocLiteralReq.xml");
assertNotNull(reader);
@@ -70,7 +67,7 @@
}
public void testReadWrapperReturn() throws Exception {
- JAXBDataReaderFactory rf = getTestReaderFactory(Greeter.class);
+ JAXBDataReaderFactory rf = getTestReaderFactory(GreetMeResponse.class);
reader = getTestReader("../resources/GreetMeDocLiteralResp.xml");
assertNotNull(reader);
@@ -86,7 +83,7 @@
}
public void testReadRPC() throws Exception {
- JAXBDataReaderFactory rf = getTestReaderFactory(GreeterRPCLit.class);
+ JAXBDataReaderFactory rf = getTestReaderFactory(MyComplexStruct.class);
QName[] tags = {new QName("http://apache.org/hello_world_rpclit", "sendReceiveData")};
@@ -110,16 +107,19 @@
public void testReadBare() throws Exception {
- JAXBDataReaderFactory rf = getTestReaderFactory(PutLastTradedPricePortType.class);
+ JAXBDataReaderFactory rf = getTestReaderFactory(TradePriceData.class);
reader = getTestReader("../resources/sayHiDocLitBareReq.xml");
assertNotNull(reader);
DataReader<XMLStreamReader> dr = rf.createReader(XMLStreamReader.class);
assertNotNull(dr);
- Object val = dr.read(new QName("http://apache.org/hello_world_doc_lit_bare/types", "inout"),
- reader,
- null);
+ QName elName = new QName("http://apache.org/hello_world_doc_lit_bare/types", "inout");
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+ part.setTypeClass(TradePriceData.class);
+ Object val = dr.read(part, reader);
assertNotNull(val);
assertTrue(val instanceof TradePriceData);
@@ -127,8 +127,8 @@
assertEquals(1.0f, ((TradePriceData)val).getTickerPrice());
}
- private JAXBDataReaderFactory getTestReaderFactory(Class clz) throws Exception {
- JAXBContext ctx = JAXBEncoderDecoder.createJAXBContextForClass(clz);
+ private JAXBDataReaderFactory getTestReaderFactory(Class... clz) throws Exception {
+ JAXBContext ctx = JAXBContext.newInstance(clz);
JAXBDataReaderFactory readerFacotry = new JAXBDataReaderFactory();
readerFacotry.setJAXBContext(ctx);
return readerFacotry;
Modified: incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataWriterTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataWriterTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataWriterTest.java (original)
+++ incubator/cxf/trunk/rt/databinding/jaxb/src/test/java/org/apache/cxf/jaxb/io/XMLStreamDataWriterTest.java Sun Oct 29 20:56:21 2006
@@ -33,14 +33,11 @@
import org.apache.cxf.databinding.DataWriter;
import org.apache.cxf.jaxb.JAXBDataWriterFactory;
-import org.apache.cxf.jaxb.JAXBEncoderDecoder;
+import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.staxutils.DepthXMLStreamReader;
import org.apache.cxf.staxutils.StaxUtils;
-import org.apache.hello_world_doc_lit_bare.PutLastTradedPricePortType;
import org.apache.hello_world_doc_lit_bare.types.TradePriceData;
-import org.apache.hello_world_rpclit.GreeterRPCLit;
import org.apache.hello_world_rpclit.types.MyComplexStruct;
-import org.apache.hello_world_soap_http.Greeter;
import org.apache.hello_world_soap_http.types.GreetMe;
import org.apache.hello_world_soap_http.types.GreetMeResponse;
@@ -63,7 +60,7 @@
}
public void testWriteRPCLit1() throws Exception {
- JAXBDataWriterFactory wf = getTestWriterFactory(GreeterRPCLit.class);
+ JAXBDataWriterFactory wf = getTestWriterFactory();
DataWriter<XMLStreamWriter> dw = wf.createWriter(XMLStreamWriter.class);
assertNotNull(dw);
@@ -71,8 +68,10 @@
String val = new String("TESTOUTPUTMESSAGE");
QName elName = new QName("http://apache.org/hello_world_rpclit/types",
"in");
-
- dw.write(val, elName, streamWriter);
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+ dw.write(val, part, streamWriter);
streamWriter.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
@@ -88,7 +87,7 @@
}
public void testWriteRPCLit2() throws Exception {
- JAXBDataWriterFactory wf = getTestWriterFactory(GreeterRPCLit.class);
+ JAXBDataWriterFactory wf = getTestWriterFactory(MyComplexStruct.class);
DataWriter<XMLStreamWriter> dw = wf.createWriter(XMLStreamWriter.class);
assertNotNull(dw);
@@ -100,8 +99,11 @@
QName elName = new QName("http://apache.org/hello_world_rpclit/types",
"in");
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
- dw.write(val, elName, streamWriter);
+ dw.write(val, part, streamWriter);
streamWriter.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
@@ -122,7 +124,7 @@
}
public void testWriteBare() throws Exception {
- JAXBDataWriterFactory wf = getTestWriterFactory(PutLastTradedPricePortType.class);
+ JAXBDataWriterFactory wf = getTestWriterFactory(TradePriceData.class);
DataWriter<XMLStreamWriter> dw = wf.createWriter(XMLStreamWriter.class);
assertNotNull(dw);
@@ -131,9 +133,11 @@
val.setTickerSymbol("This is a symbol");
val.setTickerPrice(1.0f);
- dw.write(val,
- new QName("http://apache.org/hello_world_doc_lit_bare/types", "inout"),
- streamWriter);
+ QName elName = new QName("http://apache.org/hello_world_doc_lit_bare/types", "inout");
+ MessagePartInfo part = new MessagePartInfo(elName, null);
+ part.setElement(true);
+ part.setElementQName(elName);
+ dw.write(val, part, streamWriter);
streamWriter.flush();
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
@@ -154,7 +158,7 @@
}
public void testWriteWrapper() throws Exception {
- JAXBDataWriterFactory wf = getTestWriterFactory(Greeter.class);
+ JAXBDataWriterFactory wf = getTestWriterFactory(GreetMe.class);
DataWriter<XMLStreamWriter> dw = wf.createWriter(XMLStreamWriter.class);
assertNotNull(dw);
@@ -183,7 +187,7 @@
}
public void testWriteWrapperReturn() throws Exception {
- JAXBDataWriterFactory wf = getTestWriterFactory(Greeter.class);
+ JAXBDataWriterFactory wf = getTestWriterFactory(GreetMeResponse.class);
DataWriter<XMLStreamWriter> dw = wf.createWriter(XMLStreamWriter.class);
assertNotNull(dw);
@@ -211,8 +215,8 @@
assertEquals("TESTOUTPUTMESSAGE", reader.getText());
}
- private JAXBDataWriterFactory getTestWriterFactory(Class clz) throws Exception {
- JAXBContext ctx = JAXBEncoderDecoder.createJAXBContextForClass(clz);
+ private JAXBDataWriterFactory getTestWriterFactory(Class... clz) throws Exception {
+ JAXBContext ctx = JAXBContext.newInstance(clz);
JAXBDataWriterFactory writerFactory = new JAXBDataWriterFactory();
writerFactory.setJAXBContext(ctx);
return writerFactory;
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointImpl.java Sun Oct 29 20:56:21 2006
@@ -24,7 +24,6 @@
import java.util.concurrent.Executor;
import java.util.logging.Logger;
-import javax.xml.bind.JAXBException;
import javax.xml.transform.Source;
import javax.xml.ws.Binding;
import javax.xml.ws.Provider;
@@ -39,7 +38,6 @@
import org.apache.cxf.configuration.Configurer;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.endpoint.ServerImpl;
-import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.binding.soap.JaxWsSoapBindingInfoFactoryBean;
import org.apache.cxf.jaxws.context.WebContextResourceResolver;
import org.apache.cxf.jaxws.handler.AnnotationHandlerChainBuilder;
@@ -96,11 +94,6 @@
serviceFactory = new ProviderServiceFactoryBean(implInfo);
} else {
serviceFactory = new JaxWsServiceFactoryBean(implInfo);
- try {
- serviceFactory.setDataBinding(new JAXBDataBinding(implInfo.getImplementorClass()));
- } catch (JAXBException e) {
- throw new WebServiceException("Could not create databinding.", e);
- }
}
serviceFactory.setBus(bus);
service = serviceFactory.create();
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Sun Oct 29 20:56:21 2006
@@ -81,14 +81,14 @@
private Map<QName, PortInfo> portInfos = new HashMap<QName, PortInfo>();
private Executor executor;
private QName serviceName;
- private Class<?> clazz;
+// private Class<?> clazz;
public ServiceImpl(Bus b, URL url, QName name, Class<?> cls) {
bus = b;
wsdlURL = url;
this.serviceName = name;
- clazz = cls;
-
+// clazz = cls;
+
handlerResolver = new HandlerResolverImpl(bus, name);
}
@@ -123,7 +123,17 @@
}
}
- private AbstractServiceFactoryBean createDispatchService(Class<?> type) {
+ private AbstractServiceFactoryBean createDispatchService() {
+ try {
+ return createDispatchService(new JAXBDataBinding(new Class[0]));
+ } catch (JAXBException e) {
+ throw new WebServiceException("Could not create Databinding.", e);
+ }
+ }
+ private AbstractServiceFactoryBean createDispatchService(JAXBContext context) {
+ return createDispatchService(new JAXBDataBinding(context));
+ }
+ private AbstractServiceFactoryBean createDispatchService(JAXBDataBinding db) {
AbstractServiceFactoryBean serviceFactory;
Service dispatchService = null;
@@ -131,11 +141,7 @@
if (null != wsdlURL) {
WSDLServiceFactory sf = new WSDLServiceFactory(bus, wsdlURL, serviceName);
dispatchService = sf.create();
- try {
- dispatchService.setDataBinding(new JAXBDataBinding(clazz));
- } catch (JAXBException e) {
- new WebServiceException(e);
- }
+ dispatchService.setDataBinding(db);
serviceFactory = sf;
} else {
JaxWsServiceFactoryBean sf = new JaxWsServiceFactoryBean();
@@ -143,11 +149,7 @@
sf.setServiceName(serviceName);
// maybe we can find another way to create service which have no SEI
sf.setServiceClass(DummyImpl.class);
- try {
- sf.setDataBinding(new JAXBDataBinding(type));
- } catch (JAXBException e) {
- new WebServiceException(e);
- }
+ sf.setDataBinding(db);
dispatchService = sf.create();
serviceFactory = sf;
}
@@ -156,7 +158,7 @@
}
public <T> Dispatch<T> createDispatch(QName portName, Class<T> type, Mode mode) {
- AbstractServiceFactoryBean sf = createDispatchService(type);
+ AbstractServiceFactoryBean sf = createDispatchService();
Endpoint endpoint = getJaxwsEndpoint(portName, sf);
Dispatch<T> disp = new DispatchImpl<T>(bus, mode, type, getExecutor(), endpoint);
@@ -168,7 +170,7 @@
public Dispatch<Object> createDispatch(QName portName, JAXBContext context, Mode mode) {
- AbstractServiceFactoryBean sf = createDispatchService(null);
+ AbstractServiceFactoryBean sf = createDispatchService(context);
Endpoint endpoint = getJaxwsEndpoint(portName, sf);
Dispatch<Object> disp = new DispatchImpl<Object>(bus, mode, context, Object.class, getExecutor(),
endpoint);
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/DispatchInInterceptor.java Sun Oct 29 20:56:21 2006
@@ -72,11 +72,10 @@
} else if (message instanceof XMLMessage) {
DataReader<XMLMessage> dataReader = getDataReader(message, XMLMessage.class);
message.setContent(Object.class,
- dataReader.read(null,
- (XMLMessage)message, type));
+ dataReader.read(null, (XMLMessage)message, type));
}
} catch (Exception e) {
- e.printStackTrace();
+ throw new Fault(e);
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WebFaultOutInterceptor.java Sun Oct 29 20:56:21 2006
@@ -37,6 +37,11 @@
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.apache.cxf.service.Service;
+import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.service.model.FaultInfo;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.service.model.UnwrappedOperationInfo;
public class WebFaultOutInterceptor extends AbstractPhaseInterceptor<Message> {
private static final ResourceBundle BUNDLE = BundleUtils.getBundle(JaxWsServiceConfiguration.class);
@@ -61,8 +66,10 @@
DataWriterFactory writerFactory = service.getDataBinding().getDataWriterFactory();
DataWriter<Node> writer = writerFactory.createWriter(Node.class);
+ OperationInfo op = message.getExchange().get(BindingOperationInfo.class).getOperationInfo();
QName faultName = getFaultName(ex);
- writer.write(faultInfo, faultName, f.getOrCreateDetail());
+ MessagePartInfo part = getFaultMessagePart(faultName, op);
+ writer.write(faultInfo, part, f.getOrCreateDetail());
f.setMessage(ex.getMessage());
} catch (InvocationTargetException e) {
@@ -81,6 +88,29 @@
WebFault wf = webFault.getClass().getAnnotation(WebFault.class);
return new QName(wf.targetNamespace(), wf.name());
+ }
+
+ private MessagePartInfo getFaultMessagePart(QName qname, OperationInfo op) {
+ if (op.isUnwrapped()) {
+ op = ((UnwrappedOperationInfo)op).getWrappedOperation();
+ }
+
+ for (FaultInfo faultInfo : op.getFaults()) {
+ for (MessagePartInfo mpi : faultInfo.getMessageParts()) {
+ String ns = null;
+ if (mpi.isElement()) {
+ ns = mpi.getElementQName().getNamespaceURI();
+ } else {
+ ns = mpi.getTypeQName().getNamespaceURI();
+ }
+ if (qname.getLocalPart().equals(mpi.getConcreteName().getLocalPart())
+ && qname.getNamespaceURI().equals(ns)) {
+ return mpi;
+ }
+ }
+
+ }
+ return null;
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassInInterceptor.java Sun Oct 29 20:56:21 2006
@@ -24,7 +24,6 @@
import org.apache.cxf.helpers.CastUtils;
import org.apache.cxf.interceptor.Fault;
-import org.apache.cxf.interceptor.WrappedInInterceptor;
import org.apache.cxf.jaxb.WrapperHelper;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
@@ -76,13 +75,12 @@
// Sometimes, an uperation can be unwrapped according to WSDLServiceFactory,
// but not according to JAX-WS. We should unify these at some point, but
// for now check for the wrapper class.
- if (boi2.getOperationInfo().getInput().getProperty(WrappedInInterceptor.WRAPPER_CLASS)
- == null) {
+ MessageInfo messageInfo = message.get(MessageInfo.class);
+ if (messageInfo != null && messageInfo.getMessageParts().get(0).getTypeClass() == null) {
return;
}
OperationInfo op = boi2.getOperationInfo();
- MessageInfo messageInfo = message.get(MessageInfo.class);
BindingMessageInfo bmi;
if (messageInfo == boi.getOperationInfo().getInput()) {
messageInfo = op.getInput();
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/WrapperClassOutInterceptor.java Sun Oct 29 20:56:21 2006
@@ -34,8 +34,6 @@
import org.apache.cxf.service.model.OperationInfo;
public class WrapperClassOutInterceptor extends AbstractPhaseInterceptor<Message> {
- public static final String WRAPPER_CLASS = "wrapper.class";
-
public WrapperClassOutInterceptor() {
super();
setPhase(Phase.PRE_LOGICAL);
@@ -44,13 +42,27 @@
@SuppressWarnings("unchecked")
public void handleMessage(Message message) throws Fault {
BindingOperationInfo bop = message.getExchange().get(BindingOperationInfo.class);
+
MessageInfo messageInfo = message.get(MessageInfo.class);
- if (messageInfo == null) {
+ if (messageInfo == null || bop == null || !bop.isUnwrapped()) {
return;
}
- Class<?> wrapped = (Class)messageInfo.getProperty(WRAPPER_CLASS);
+
+ BindingOperationInfo newbop = bop.getWrappedOperation();
+ MessageInfo wrappedMsgInfo;
+ if (Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE))) {
+ wrappedMsgInfo = newbop.getInput().getMessageInfo();
+ } else {
+ wrappedMsgInfo = newbop.getOutput().getMessageInfo();
+ }
+
+ Class<?> wrapped = null;
+ List<MessagePartInfo> parts = wrappedMsgInfo.getMessageParts();
+ if (parts.size() > 0) {
+ wrapped = parts.get(0).getTypeClass();
+ }
- if (bop != null && wrapped != null) {
+ if (wrapped != null) {
List<Object> objs = message.getContent(List.class);
try {
@@ -71,7 +83,6 @@
}
// we've now wrapped the object, so use the wrapped binding op
- BindingOperationInfo newbop = bop.getWrappedOperation();
message.getExchange().put(BindingOperationInfo.class, newbop);
message.getExchange().put(OperationInfo.class, newbop.getOperationInfo());
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java Sun Oct 29 20:56:21 2006
@@ -41,7 +41,7 @@
import org.apache.cxf.service.model.EndpointInfo;
/**
- * A JAX-WS specific implementation of the CXF {@link Endpoint} interface.
+ * A JAX-WS specific implementation of the CXF {@link org.apache.cxf.endpoint.Endpoint} interface.
* Extends the interceptor provider functionality of its base class by adding
* interceptors in which to execute the JAX-WS handlers.
* Creates and owns an implementation of {@link Binding} in addition to the
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceConfiguration.java Sun Oct 29 20:56:21 2006
@@ -20,12 +20,19 @@
package org.apache.cxf.jaxws.support;
import java.io.IOException;
+import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ResourceBundle;
import javax.jws.WebMethod;
+import javax.jws.WebParam;
+import javax.jws.WebParam.Mode;
+import javax.jws.WebResult;
import javax.jws.WebService;
+import javax.jws.soap.SOAPBinding;
+import javax.jws.soap.SOAPBinding.ParameterStyle;
+import javax.jws.soap.SOAPBinding.Style;
import javax.xml.namespace.QName;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@@ -37,6 +44,7 @@
import org.apache.cxf.common.i18n.Message;
import org.apache.cxf.resource.URIResolver;
import org.apache.cxf.service.factory.AbstractServiceConfiguration;
+import org.apache.cxf.service.factory.DefaultServiceConfiguration;
import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
import org.apache.cxf.service.factory.ServiceConstructionException;
import org.apache.cxf.service.model.InterfaceInfo;
@@ -50,7 +58,7 @@
@Override
public void setServiceFactory(ReflectionServiceFactoryBean serviceFactory) {
super.setServiceFactory(serviceFactory);
- implInfo = ((JaxWsServiceFactoryBean) serviceFactory).getJaxWsImplementorInfo();
+ implInfo = ((JaxWsServiceFactoryBean)serviceFactory).getJaxWsImplementorInfo();
}
WebService getConcreteWebServiceAttribute() {
@@ -106,10 +114,8 @@
throw new WebServiceException("Could not find WSDL with URL " + ws.wsdlLocation());
}
} catch (IOException e) {
- throw new ServiceConstructionException(new Message("LOAD_WSDL_EXC",
- BUNDLE,
- ws.wsdlLocation()),
- e);
+ throw new ServiceConstructionException(
+ new Message("LOAD_WSDL_EXC", BUNDLE, ws.wsdlLocation()), e);
}
}
return null;
@@ -164,16 +170,177 @@
}
return method;
}
-
+
+ @Override
+ public QName getInPartName(OperationInfo op, Method method, int paramNumber) {
+ if (paramNumber < 0) {
+ return null;
+ }
+
+ return getPartName(op, method, paramNumber, "in");
+ }
+
+ @Override
+ public QName getInParameterName(OperationInfo op, Method method, int paramNumber) {
+ if (paramNumber < 0) {
+ return null;
+ }
+
+ return getParameterName(op, method, paramNumber, "in");
+ }
+
+ private QName getPartName(OperationInfo op, Method method, int paramNumber, String prefix) {
+ WebParam param = getWebParam(method, paramNumber);
+ if (param != null) {
+ String tns = op.getName().getNamespaceURI();
+ String local = param.partName();
+
+ if (local.length() == 0) {
+ local = param.name();
+ }
+
+ if (local.length() == 0) {
+ getDefaultLocalName(op, method, paramNumber, prefix);
+ }
+
+ return new QName(tns, local);
+ }
+ return null;
+ }
+
+ private QName getParameterName(OperationInfo op, Method method, int paramNumber, String prefix) {
+ WebParam param = getWebParam(method, paramNumber);
+ if (param != null) {
+ String tns = param.targetNamespace();
+ String local = param.name();
+
+ if (tns.length() == 0) {
+ tns = op.getName().getNamespaceURI();
+ }
+
+ if (local.length() == 0) {
+ local = getDefaultLocalName(op, method, paramNumber, prefix);
+ }
+
+ return new QName(tns, local);
+ }
+ return null;
+ }
+
+ private String getDefaultLocalName(OperationInfo op, Method method, int paramNumber, String prefix) {
+ Class<?> impl = implInfo.getImplementorClass();
+ // try to grab the implementation class so we can read the debug symbols from it
+ if (impl == null) {
+ try {
+ method = impl.getMethod(method.getName(), method.getParameterTypes());
+ } catch (Exception e) {
+ throw new ServiceConstructionException(e);
+ }
+ }
+
+ return DefaultServiceConfiguration.createName(method, paramNumber, op.getInput()
+ .getMessageParts().size(), false, prefix);
+ }
+
+ private WebParam getWebParam(Method method, int parameter) {
+ Annotation[][] annotations = method.getParameterAnnotations();
+ if (parameter >= annotations.length) {
+ return null;
+ } else {
+ for (int i = 0; i < annotations[parameter].length; i++) {
+ Annotation annotation = annotations[parameter][i];
+ if (annotation.annotationType().equals(WebParam.class)) {
+ return (WebParam)annotation;
+ }
+ }
+ return null;
+ }
+ }
+
+ @Override
+ public QName getOutParameterName(OperationInfo op, Method method, int paramNumber) {
+ if (paramNumber >= 0) {
+ return getParameterName(op, method, paramNumber, "out");
+ } else {
+ WebResult webResult = getWebResult(method);
+
+ if (webResult != null) {
+ String tns = webResult.targetNamespace();
+ String local = webResult.name();
+
+ if (tns.length() == 0) {
+ tns = op.getName().getNamespaceURI();
+ }
+
+ if (local.length() == 0) {
+ local = getDefaultLocalName(op, method, paramNumber, "out");
+ }
+
+ return new QName(tns, local);
+ }
+ }
+ return super.getOutParameterName(op, method, paramNumber);
+ }
+
+ @Override
+ public QName getOutPartName(OperationInfo op, Method method, int paramNumber) {
+ if (paramNumber >= 0) {
+ return getPartName(op, method, paramNumber, "out");
+ } else {
+ WebResult webResult = getWebResult(method);
+
+ if (webResult != null) {
+ String tns = op.getName().getNamespaceURI();
+ String local = webResult.partName();
+
+ if (local.length() == 0) {
+ local = webResult.name();
+ }
+
+ if (local.length() == 0) {
+ local = getDefaultLocalName(op, method, paramNumber, "out");
+ }
+ return new QName(tns, local);
+ }
+ }
+ return super.getOutPartName(op, method, paramNumber);
+ }
+
+ @Override
+ public Boolean isInParam(Method method, int j) {
+ if (j < 0) {
+ return Boolean.FALSE;
+ }
+
+ WebParam webParam = getWebParam(method, j);
+
+ return webParam == null || (webParam.mode().equals(Mode.IN) || webParam.mode().equals(Mode.INOUT));
+ }
+
+ private WebResult getWebResult(Method method) {
+ return method.getAnnotation(WebResult.class);
+ }
+
+ @Override
+ public Boolean isOutParam(Method method, int j) {
+ if (j == -1) {
+ return !method.getReturnType().equals(void.class);
+ }
+
+ WebParam webParam = getWebParam(method, j);
+
+ return webParam != null && (webParam.mode().equals(Mode.OUT) || webParam.mode().equals(Mode.INOUT));
+ }
+
@Override
public Class getResponseWrapper(Method selected) {
Method m = getDeclaredMethod(selected);
-
+
ResponseWrapper rw = m.getAnnotation(ResponseWrapper.class);
if (rw == null) {
return null;
}
-
+
String clsName = rw.className();
if (clsName.length() > 0) {
try {
@@ -182,19 +349,19 @@
throw new ServiceConstructionException(e);
}
}
-
+
return null;
}
@Override
public Class getRequestWrapper(Method selected) {
Method m = getDeclaredMethod(selected);
-
+
RequestWrapper rw = m.getAnnotation(RequestWrapper.class);
if (rw == null) {
return null;
}
-
+
String clsName = rw.className();
if (clsName.length() > 0) {
@@ -204,7 +371,7 @@
throw new ServiceConstructionException(e);
}
}
-
+
return null;
}
@@ -220,10 +387,30 @@
if (ns.length() == 0) {
ns = service.getName().getNamespaceURI();
}
-
+
return new QName(ns, name);
}
return null;
}
-
+
+ @Override
+ public Boolean isWrapped(Method m) {
+ // see if someone overrode the default value
+ if (!getServiceFactory().isWrapped()) {
+ return Boolean.FALSE;
+ }
+
+ SOAPBinding ann = m.getAnnotation(SOAPBinding.class);
+ if (ann != null) {
+ return !(ann.parameterStyle().equals(ParameterStyle.BARE) || ann.style().equals(Style.RPC));
+ }
+
+ ann = implInfo.getEndpointClass().getAnnotation(SOAPBinding.class);
+ if (ann != null) {
+ return !(ann.parameterStyle().equals(ParameterStyle.BARE) || ann.style().equals(Style.RPC));
+ }
+
+ return null;
+ }
+
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Sun Oct 29 20:56:21 2006
@@ -23,12 +23,12 @@
import java.lang.reflect.GenericArrayType;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.wsdl.Operation;
-import javax.xml.bind.JAXBException;
import javax.xml.namespace.QName;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Holder;
@@ -36,14 +36,12 @@
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
-import org.apache.cxf.interceptor.WrappedInInterceptor;
-import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.interceptors.WebFaultOutInterceptor;
-import org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor;
import org.apache.cxf.service.factory.ServiceConstructionException;
import org.apache.cxf.service.model.EndpointInfo;
import org.apache.cxf.service.model.FaultInfo;
import org.apache.cxf.service.model.InterfaceInfo;
+import org.apache.cxf.service.model.MessageInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.wsdl11.WSDLServiceBuilder;
@@ -56,8 +54,6 @@
public static final String HOLDER = "messagepart.isholder";
- private JAXBDataBinding dataBinding;
-
private JaxWsServiceConfiguration jaxWsConfiguration;
public JaxWsServiceFactoryBean() {
@@ -131,41 +127,13 @@
void initializeWrapping(OperationInfo o, Method selected) {
Class responseWrapper = getResponseWrapper(selected);
if (responseWrapper != null) {
- o.getUnwrappedOperation().getOutput().setProperty(WrapperClassOutInterceptor.WRAPPER_CLASS,
- responseWrapper);
+ o.getOutput().getMessageParts().get(0).setTypeClass(responseWrapper);
}
Class<?> requestWrapper = getRequestWrapper(selected);
if (requestWrapper != null) {
- o.getUnwrappedOperation().getInput().setProperty(WrappedInInterceptor.WRAPPER_CLASS,
- requestWrapper);
+ o.getInput().getMessageParts().get(0).setTypeClass(requestWrapper);
}
}
-
- @Override
- protected void initializeDataBindings() {
- try {
- dataBinding = new JAXBDataBinding(getJaxWsImplementorInfo().getEndpointClass());
- } catch (JAXBException e) {
- throw new ServiceConstructionException(e);
- }
-
- setDataBinding(dataBinding);
-
- super.initializeDataBindings();
- }
-
-
- private void setInputClassInfo(OperationInfo o, Method selected) {
- Object[] para = selected.getParameterTypes();
- int inIdx = 0;
- for (MessagePartInfo mpiIn : o.getInput().getMessageParts()) {
- // check for sayHi() type no input param method
- if (para.length > 0 && !para[inIdx].equals(Holder.class)) {
- mpiIn.setProperty(Class.class.getName(), para[inIdx]);
- }
- inIdx++;
- }
- }
private void setFaultClassInfo(OperationInfo o, Method selected) {
Class[] types = selected.getExceptionTypes();
@@ -189,7 +157,7 @@
Method method = beanClass.getMethod("getFaultInfo", new Class[0]);
Class sub = method.getReturnType();
fi.setProperty(Class.class.getName(), exClass);
- mpi.setProperty(Class.class.getName(), sub);
+ mpi.setTypeClass(sub);
} catch (NoSuchMethodException nsme) {
nsme.printStackTrace();
}
@@ -204,95 +172,96 @@
* @param o
* @param method
*/
- protected void initalizeClassInfo(OperationInfo o, Method selected, List<String> paramOrder) {
- setInputClassInfo(o, selected);
- if (o.getOutput() == null) {
- return;
- }
- int outPartCount = o.getOutput().getMessageParts().size();
- int inPartCount = o.getInput().getMessageParts().size();
- int outIdx = 0;
- int offset = 0;
- for (MessagePartInfo mpiOut : o.getOutput().getMessageParts()) {
- int inIdx = 0;
- boolean isInOut = false;
- MessagePartInfo mpiInHolder = null;
- Object[] paraType = selected.getGenericParameterTypes();
- for (MessagePartInfo mpiIn : o.getInput().getMessageParts()) {
- if (mpiOut.getName().equals(mpiIn.getName())) {
- if (mpiOut.isElement() && mpiIn.isElement()
- && mpiOut.getElementQName().equals(mpiIn.getElementQName())) {
- isInOut = true;
- mpiInHolder = mpiIn;
- } else if (!mpiOut.isElement() && !mpiIn.isElement()
- && mpiOut.getTypeQName().equals(mpiIn.getTypeQName())) {
- isInOut = true;
- mpiInHolder = mpiIn;
- }
- }
- if (isInOut) {
- ParameterizedType paramType = (ParameterizedType) paraType[inIdx];
- Class rawClass = getHolderClass(paramType, inIdx);
- mpiOut.setProperty(Class.class.getName(), rawClass);
- mpiInHolder.setProperty(Class.class.getName(), rawClass);
- mpiOut.setProperty(JaxWsServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
- mpiInHolder.setProperty(JaxWsServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
- offset++;
- break;
- }
- inIdx++;
+ protected void initalizeClassInfo(OperationInfo o, Method method, List<String> paramOrder) {
+ if (isWrapped(method)) {
+ if (o.hasInput()) {
+ MessageInfo input = o.getInput();
+ MessagePartInfo part = input.getMessageParts().get(0);
+ part.setTypeClass(getRequestWrapper(method));
}
- if (!isInOut) {
- if (((Class) selected.getReturnType()).getName().equals("void")) {
- // to avoid <element name="..."><complexType/></element> in
- // output message part
- if (paraType.length > inPartCount + outIdx
- && paraType[inPartCount + outIdx] instanceof ParameterizedType) {
- ParameterizedType paramType = (ParameterizedType) paraType[inPartCount + outIdx];
- Class rawClass = getHolderClass(paramType, inPartCount + outIdx);
- mpiOut.setProperty(Class.class.getName(), rawClass);
- mpiOut.setProperty(JaxWsServiceFactoryBean.MODE_OUT, Boolean.TRUE);
- }
- } else {
- String local = mpiOut.isElement() ? mpiOut.getElementQName().getLocalPart() : mpiOut
- .getTypeQName().getLocalPart();
- if ("return".equalsIgnoreCase(mpiOut.getName().getLocalPart()) || outPartCount == 1) {
- mpiOut.setProperty(Class.class.getName(), selected.getReturnType());
- offset++;
- } else {
- if (paramOrder != null && !paramOrder.contains(local)) {
- int idx = inPartCount + outIdx - offset;
- ParameterizedType paramType = (ParameterizedType) paraType[idx];
- Class rawClass = getHolderClass(paramType, idx);
- mpiOut.setProperty(Class.class.getName(), rawClass);
- mpiOut.setProperty(JaxWsServiceFactoryBean.MODE_OUT, Boolean.TRUE);
- }
- }
- }
- }
- outIdx++;
+
+ if (o.hasOutput()) {
+ MessageInfo input = o.getOutput();
+ MessagePartInfo part = input.getMessageParts().get(0);
+ part.setTypeClass(getResponseWrapper(method));
+ }
+
+ setFaultClassInfo(o, method);
+ o = o.getUnwrappedOperation();
+ } else if (o.isUnwrappedCapable()) {
+ // remove the unrwrapped operation because it will break the
+ // the WrapperClassOutInterceptor, and in general makes
+ // life more confusing
+ o.setUnwrappedOperation(null);
+
+ setFaultClassInfo(o, method);
+ }
+
+ // Initialize return type
+ Class<?>[] paramTypes = method.getParameterTypes();
+ Type[] genericTypes = method.getGenericParameterTypes();
+ for (int i = 0; i < paramTypes.length; i++) {
+ Class paramType = paramTypes[i];
+ Type genericType = genericTypes[i];
+
+ initializeParameter(o, method, i, paramType, genericType);
}
- setFaultClassInfo(o, selected);
+
+ Class paramType = method.getReturnType();
+ Type genericType = method.getGenericReturnType();
+
+ initializeParameter(o, method, -1, paramType, genericType);
+
+ setFaultClassInfo(o, method);
+ }
+
+ private void initializeParameter(OperationInfo o, Method method, int i,
+ Class paramType, Type genericType) {
+ boolean isIn = isInParam(method, i);
+ boolean isOut = isOutParam(method, i);
+
+ if (isIn && !isOut) {
+ QName name = getInPartName(o, method, i);
+ MessagePartInfo part = o.getInput().getMessagePart(name);
+ initializeParameter(part, paramType, genericType, i);
+ } else if (!isIn && isOut) {
+ QName name = getOutPartName(o, method, i);
+ MessagePartInfo part = o.getOutput().getMessagePart(name);
+ initializeParameter(part, paramType, genericType, i);
+ } else if (isIn && isOut) {
+ QName name = getOutPartName(o, method, i);
+ MessagePartInfo part = o.getInput().getMessagePart(name);
+ part.setProperty(JaxWsServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
+ initializeParameter(part, paramType, genericType, i);
+
+ part = o.getOutput().getMessagePart(name);
+ part.setProperty(JaxWsServiceFactoryBean.MODE_INOUT, Boolean.TRUE);
+ initializeParameter(part, paramType, genericType, i);
+ }
+ }
+
+ private void initializeParameter(MessagePartInfo part, Class rawClass, Type type, int i) {
+ if (rawClass.equals(Holder.class) && type instanceof ParameterizedType) {
+ ParameterizedType paramType = (ParameterizedType)type;
+ rawClass = getHolderClass(paramType, i);
+ }
+ part.setProperty(GENERIC_TYPE, type);
+ part.setTypeClass(rawClass);
}
private static Class getHolderClass(ParameterizedType paramType, int idx) {
- if (((Class) paramType.getRawType()).getName().equals("javax.xml.ws.Holder")) {
- Object rawType = paramType.getActualTypeArguments()[0];
- Class rawClass;
- if (rawType instanceof GenericArrayType) {
- rawClass = (Class) ((GenericArrayType) rawType).getGenericComponentType();
- rawClass = Array.newInstance(rawClass, 0).getClass();
- } else {
- if (rawType instanceof ParameterizedType) {
- rawType = (Class) ((ParameterizedType) rawType).getRawType();
- }
- rawClass = (Class) rawType;
- }
- return rawClass;
+ Object rawType = paramType.getActualTypeArguments()[0];
+ Class rawClass;
+ if (rawType instanceof GenericArrayType) {
+ rawClass = (Class) ((GenericArrayType) rawType).getGenericComponentType();
+ rawClass = Array.newInstance(rawClass, 0).getClass();
} else {
- throw new RuntimeException("Expected Holder at " + idx + " parametor of input message");
+ if (rawType instanceof ParameterizedType) {
+ rawType = (Class) ((ParameterizedType) rawType).getRawType();
+ }
+ rawClass = (Class) rawType;
}
-
+ return rawClass;
}
public void setJaxWsConfiguration(JaxWsServiceConfiguration jaxWsConfiguration) {
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/ProviderServiceFactoryBean.java Sun Oct 29 20:56:21 2006
@@ -22,11 +22,9 @@
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import javax.xml.bind.JAXBException;
import javax.xml.namespace.QName;
import org.apache.cxf.binding.xml.XMLConstants;
-import org.apache.cxf.databinding.DataBinding;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointException;
import org.apache.cxf.jaxb.JAXBDataBinding;
@@ -61,8 +59,6 @@
try {
Method invoke = getServiceClass().getMethod("invoke", c);
-
-
// Bind each operation to the invoke method.
for (OperationInfo o : getService().getServiceInfo().getInterface().getOperations()) {
getMethodDispatcher().bind(o, invoke);
@@ -141,12 +137,7 @@
@Override
protected void initializeDataBindings() {
- try {
- DataBinding dataBinding = new JAXBDataBinding(getServiceClass());
- setDataBinding(dataBinding);
- } catch (JAXBException e) {
- throw new ServiceConstructionException(e);
- }
+ setDataBinding(new JAXBDataBinding());
super.initializeDataBindings();
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/CodeFirstTest.java Sun Oct 29 20:56:21 2006
@@ -27,7 +27,6 @@
import org.w3c.dom.Node;
import org.apache.cxf.Bus;
-import org.apache.cxf.jaxb.JAXBDataBinding;
import org.apache.cxf.jaxws.service.Hello;
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
import org.apache.cxf.service.Service;
@@ -42,9 +41,8 @@
public void testDocLitModel() throws Exception {
Definition d = createService(false);
-
+
Document wsdl = WSDLFactory.newInstance().newWSDLWriter().getDocument(d);
-
addNamespace("svc", "http://service.jaxws.cxf.apache.org");
assertValid("/wsdl:definitions/wsdl:service[@name='Hello']", wsdl);
@@ -83,12 +81,11 @@
bean.setBus(bus);
bean.setServiceClass(Hello.class);
bean.setWrapped(wrapped);
- bean.setDataBinding(new JAXBDataBinding(Hello.class));
Service service = bean.create();
InterfaceInfo i = service.getServiceInfo().getInterface();
- assertEquals(1, i.getOperations().size());
+ assertEquals(2, i.getOperations().size());
ServerFactoryBean svrFactory = new ServerFactoryBean();
svrFactory.setBus(bus);
@@ -118,5 +115,14 @@
addNamespace("h", "http://service.jaxws.cxf.apache.org");
assertValid("//s:Body/h:sayHiResponse/h:out", res);
+
+ res = invoke("http://localhost:9090/hello",
+ LocalTransportFactory.TRANSPORT_ID,
+ "getGreetings.xml");
+
+ assertNotNull(res);
+
+ addNamespace("h", "http://service.jaxws.cxf.apache.org");
+ assertValid("//s:Body/h:getGreetingsResponse/h:out/item", res);
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java?view=diff&rev=469066&r1=469065&r2=469066
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/HeaderTest.java Sun Oct 29 20:56:21 2006
@@ -18,13 +18,21 @@
*/
package org.apache.cxf.jaxws;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+
import org.w3c.dom.Node;
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
+import org.apache.cxf.service.Service;
import org.apache.cxf.service.factory.ServerFactoryBean;
+import org.apache.cxf.service.model.MessagePartInfo;
+import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.transport.local.LocalTransportFactory;
import org.apache.header_test.TestHeaderImpl;
+import org.apache.header_test.types.TestHeader5;
public class HeaderTest extends AbstractJaxWsTest {
public void testInvocation() throws Exception {
@@ -34,7 +42,27 @@
bean.setBus(bus);
bean.setServiceClass(TestHeaderImpl.class);
- bean.create();
+ Service service = bean.create();
+
+ OperationInfo op = service.getServiceInfo().getInterface().getOperation(
+ new QName(service.getName().getNamespaceURI(), "testHeader5"));
+ assertNotNull(op);
+ List<MessagePartInfo> parts = op.getInput().getMessageParts();
+ assertEquals(1, parts.size());
+
+ MessagePartInfo part = parts.get(0);
+ assertNotNull(part.getTypeClass());
+ assertEquals(TestHeader5.class, part.getTypeClass());
+
+ parts = op.getOutput().getMessageParts();
+ assertEquals(1, parts.size());
+
+ part = parts.get(0);
+ assertNotNull(part.getTypeClass());
+ assertEquals(TestHeader5.class, part.getTypeClass());
+
+// part = parts.get(1);
+// assertNotNull(part.getTypeClass());
ServerFactoryBean svr = new ServerFactoryBean();
svr.setBus(bus);