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/04/26 18:46:58 UTC
svn commit: r532798 - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/interceptor/
common/common/src/main/java/org/apache/cxf/staxutils/
rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/
rt/bindings/soap/src/test/java/org/apache/cxf...
Author: dkulp
Date: Thu Apr 26 09:46:57 2007
New Revision: 532798
URL: http://svn.apache.org/viewvc?view=rev&rev=532798
Log:
Promote fault code up to Fault. Add internal CLIENT/SERVER codes.
Map some "Client" errors to the approriate Fault code
Fix some problems with SAAJ handlers interacting funny with Provider based services
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java
incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java
incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapFault.java
incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInInterceptor.java
incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ProviderInDatabindingInterceptor.java
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/interceptor/Fault.java Thu Apr 26 09:46:57 2007
@@ -19,6 +19,8 @@
package org.apache.cxf.interceptor;
+import javax.xml.namespace.QName;
+
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -30,19 +32,24 @@
* A Fault that occurs during invocation processing.
*/
public class Fault extends UncheckedException {
-
+ public static final QName FAULT_CODE_CLIENT = new QName("http://cxf.apache.org/faultcode", "client");
+ public static final QName FAULT_CODE_SERVER = new QName("http://cxf.apache.org/faultcode", "server");
+
public static final String STACKTRACE = "stackTrace";
private Element detail;
private String message;
+ private QName code;
public Fault(Message message, Throwable throwable) {
super(message, throwable);
this.message = message.toString();
+ code = FAULT_CODE_SERVER;
}
public Fault(Message message) {
super(message);
this.message = message.toString();
+ code = FAULT_CODE_SERVER;
}
public Fault(Throwable t) {
@@ -52,14 +59,46 @@
} else {
message = t == null ? null : t.getMessage();
}
+ code = FAULT_CODE_SERVER;
+ }
+
+ public Fault(Message message, Throwable throwable, QName fc) {
+ super(message, throwable);
+ this.message = message.toString();
+ code = fc;
+ }
+
+ public Fault(Message message, QName fc) {
+ super(message);
+ this.message = message.toString();
+ code = fc;
}
+ public Fault(Throwable t, QName fc) {
+ super(t);
+ if (super.getMessage() != null) {
+ message = super.getMessage();
+ } else {
+ message = t == null ? null : t.getMessage();
+ }
+ code = fc;
+ }
+
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
+ }
+
+ public QName getFaultCode() {
+ return code;
+ }
+
+ public Fault setFaultCode(QName c) {
+ code = c;
+ return this;
}
/**
Modified: incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java (original)
+++ incubator/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamReader.java Thu Apr 26 09:46:57 2007
@@ -121,7 +121,7 @@
super.endElement();
}
- final Element getCurrentElement() {
+ public final Element getCurrentElement() {
return (Element)getCurrentFrame().element;
}
Modified: incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapFault.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapFault.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapFault.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapFault.java Thu Apr 26 09:46:57 2007
@@ -46,38 +46,27 @@
* FaultHandler) be mapped to "Sender" instead.
*/
- private QName faultCode;
private QName subCode;
private String role;
private String node;
private Map<String, String> namespaces = new HashMap<String, String>();
public SoapFault(Message message, Throwable throwable, QName faultCode) {
- super(message, throwable);
- this.faultCode = faultCode;
+ super(message, throwable, faultCode);
}
public SoapFault(Message message, QName faultCode) {
- super(message);
- this.faultCode = faultCode;
+ super(message, faultCode);
}
public SoapFault(String message, QName faultCode) {
- super(new Message(message, (ResourceBundle)null));
- this.faultCode = faultCode;
+ super(new Message(message, (ResourceBundle)null), faultCode);
}
- /**
- * Returns the fault code of this fault.
- *
- * @return the fault code.
- */
- public QName getFaultCode() {
- return faultCode;
- }
+
public String getCodeString(String prefix, String defaultPrefix) {
- return getFaultCodeString(prefix, defaultPrefix, faultCode);
+ return getFaultCodeString(prefix, defaultPrefix, getFaultCode());
}
public String getSubCodeString(String prefix, String defaultPrefix) {
@@ -98,15 +87,6 @@
return prefix + ":" + fCode.getLocalPart();
}
- /**
- * Sets the fault code of this fault.
- *
- * @param faultCode the fault code.
- */
- public void setFaultCode(QName faultCode) {
- this.faultCode = faultCode;
- }
-
public String getReason() {
return getMessage();
}
@@ -168,8 +148,15 @@
return (SoapFault)f;
}
- SoapFault soapFault = new SoapFault(new Message(f.getMessage(), (ResourceBundle)null), f.getCause(),
- v.getReceiver());
+ QName fc = f.getFaultCode();
+ if (Fault.FAULT_CODE_CLIENT.equals(fc)) {
+ fc = v.getSender();
+ } else if (Fault.FAULT_CODE_SERVER.equals(fc)) {
+ fc = v.getReceiver();
+ }
+ SoapFault soapFault = new SoapFault(new Message(f.getMessage(), (ResourceBundle)null),
+ f.getCause(),
+ fc);
soapFault.setDetail(f.getDetail());
return soapFault;
Modified: incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java (original)
+++ incubator/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java Thu Apr 26 09:46:57 2007
@@ -33,6 +33,7 @@
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.ExchangeImpl;
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.staxutils.StaxUtils;
@@ -134,4 +135,23 @@
assertEquals(fault.getMessage(), fault2.getMessage());
}
+ @Test
+ public void testFaultToSoapFault() throws Exception {
+ Exception ex = new Exception();
+ Fault fault = new Fault(ex, Fault.FAULT_CODE_CLIENT);
+
+ SoapFault sf = SoapFault.createFault(fault, Soap11.getInstance());
+ assertEquals(Soap11.getInstance().getSender(), sf.getFaultCode());
+
+ sf = SoapFault.createFault(fault, Soap12.getInstance());
+ assertEquals(Soap12.getInstance().getSender(), sf.getFaultCode());
+
+ fault = new Fault(ex, Fault.FAULT_CODE_SERVER);
+ sf = SoapFault.createFault(fault, Soap11.getInstance());
+ assertEquals(Soap11.getInstance().getReceiver(), sf.getFaultCode());
+
+ sf = SoapFault.createFault(fault, Soap12.getInstance());
+ assertEquals(Soap12.getInstance().getReceiver(), sf.getFaultCode());
+
+ }
}
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/BareInInterceptor.java Thu Apr 26 09:46:57 2007
@@ -132,7 +132,8 @@
}
if (p == null) {
- throw new Fault(new org.apache.cxf.common.i18n.Message("NO_PART_FOUND", BUNDLE, elName));
+ throw new Fault(new org.apache.cxf.common.i18n.Message("NO_PART_FOUND", BUNDLE, elName),
+ Fault.FAULT_CODE_CLIENT);
}
o = dr.read(p, xmlReader);
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInInterceptor.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/DocLiteralInInterceptor.java Thu Apr 26 09:46:57 2007
@@ -177,7 +177,8 @@
}
if (p == null) {
- throw new Fault(new org.apache.cxf.common.i18n.Message("NO_PART_FOUND", BUNDLE, elName));
+ throw new Fault(new org.apache.cxf.common.i18n.Message("NO_PART_FOUND", BUNDLE, elName),
+ Fault.FAULT_CODE_CLIENT);
}
o = dr.read(p, xmlReader);
Modified: incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java (original)
+++ incubator/cxf/trunk/rt/core/src/main/java/org/apache/cxf/interceptor/WrappedInInterceptor.java Thu Apr 26 09:46:57 2007
@@ -82,7 +82,8 @@
// TODO: Allow overridden methods.
operation = ServiceModelUtil.getOperation(message.getExchange(), local);
if (operation == null) {
- throw new Fault(new org.apache.cxf.common.i18n.Message("NO_OPERATION", BUNDLE, local));
+ throw new Fault(new org.apache.cxf.common.i18n.Message("NO_OPERATION", BUNDLE, local),
+ Fault.FAULT_CODE_CLIENT);
}
}
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/LogicalMessageImpl.java Thu Apr 26 09:46:57 2007
@@ -25,6 +25,8 @@
import javax.xml.bind.JAXBContext;
import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPMessage;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.Source;
@@ -60,22 +62,32 @@
msgContext.getWrappedMessage().setContent(List.class, list);
}
- W3CDOMStreamWriter writer;
- try {
- writer = new W3CDOMStreamWriter();
- } catch (ParserConfigurationException e) {
- throw new WebServiceException(e);
+ SOAPMessage msg = msgContext.getWrappedMessage().getContent(SOAPMessage.class);
+ if (msg != null) {
+ try {
+ source = new DOMSource(msg.getSOAPBody().getFirstChild());
+ } catch (SOAPException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ } else {
+ W3CDOMStreamWriter writer;
+ try {
+ writer = new W3CDOMStreamWriter();
+ } catch (ParserConfigurationException e) {
+ throw new WebServiceException(e);
+ }
+ XMLStreamWriter orig = msgContext.getWrappedMessage().getContent(XMLStreamWriter.class);
+ try {
+ msgContext.getWrappedMessage().setContent(XMLStreamWriter.class, writer);
+ BareOutInterceptor bi = new BareOutInterceptor();
+ bi.handleMessage(msgContext.getWrappedMessage());
+ } finally {
+ msgContext.getWrappedMessage().setContent(XMLStreamWriter.class, orig);
+ }
+
+ source = new DOMSource(writer.getDocument().getDocumentElement());
}
- XMLStreamWriter orig = msgContext.getWrappedMessage().getContent(XMLStreamWriter.class);
- try {
- msgContext.getWrappedMessage().setContent(XMLStreamWriter.class, writer);
- BareOutInterceptor bi = new BareOutInterceptor();
- bi.handleMessage(msgContext.getWrappedMessage());
- } finally {
- msgContext.getWrappedMessage().setContent(XMLStreamWriter.class, orig);
- }
-
- source = new DOMSource(writer.getDocument().getDocumentElement());
msgContext.getWrappedMessage().setContent(Source.class, source);
}
return source;
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ProviderInDatabindingInterceptor.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ProviderInDatabindingInterceptor.java?view=diff&rev=532798&r1=532797&r2=532798
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ProviderInDatabindingInterceptor.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/interceptors/ProviderInDatabindingInterceptor.java Thu Apr 26 09:46:57 2007
@@ -24,6 +24,8 @@
import javax.xml.soap.SOAPMessage;
import javax.xml.stream.XMLStreamReader;
+import org.w3c.dom.Node;
+
import org.apache.cxf.databinding.DataReader;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
@@ -34,6 +36,7 @@
import org.apache.cxf.phase.Phase;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.staxutils.W3CDOMStreamReader;
public class ProviderInDatabindingInterceptor extends AbstractInDatabindingInterceptor {
@@ -62,21 +65,29 @@
}
Service s = ex.get(Service.class);
- SOAPMessage sm = message.getContent(SOAPMessage.class);
- if (sm != null) {
- params.add(sm);
+
+ if (SOAPMessage.class.equals(type)) {
+ SOAPMessage msg = message.getContent(SOAPMessage.class);
+ params.add(msg);
} else {
+
XMLStreamReader r = message.getContent(XMLStreamReader.class);
-
if (r != null) {
- DataReader<XMLStreamReader> reader =
- s.getDataBinding().createReader(XMLStreamReader.class);
-
- Object object = reader.read(null, r, type);
- params.add(object);
+ if (r instanceof W3CDOMStreamReader) {
+ Node nd = ((W3CDOMStreamReader)r).getCurrentElement();
+ DataReader<Node> reader =
+ s.getDataBinding().createReader(Node.class);
+ Object object = reader.read(null, nd, type);
+ params.add(object);
+ } else {
+ DataReader<XMLStreamReader> reader =
+ s.getDataBinding().createReader(XMLStreamReader.class);
+
+ Object object = reader.read(null, r, type);
+ params.add(object);
+ }
}
}
-
message.setContent(Object.class, params);
}