You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2009/03/26 09:14:46 UTC
svn commit: r758549 - in
/servicemix/components/bindings/servicemix-cxf-bc/trunk/src:
main/java/org/apache/servicemix/cxfbc/
main/java/org/apache/servicemix/cxfbc/interceptors/
test/java/org/apache/servicemix/cxfbc/
Author: ffang
Date: Thu Mar 26 08:14:41 2009
New Revision: 758549
URL: http://svn.apache.org/viewvc?rev=758549&view=rev
Log:
[SMXCOMP-487]cxf bc provider lost faultstring and faultcode for incoming soap fault message from externel service
Modified:
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java?rev=758549&r1=758548&r2=758549&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java Thu Mar 26 08:14:41 2009
@@ -747,7 +747,12 @@
"Fault occured", (ResourceBundle) null));
if (exchange.getProperty("faultstring") != null) {
f.setMessage((String)exchange.getProperty("faultstring"));
- } else {
+ }
+ if (exchange.getProperty("faultcode") != null) {
+ f.setFaultCode((QName) exchange
+ .getProperty("faultcode"));
+ }
+ if (exchange.getProperty("hasdetail") == null) {
Element details = toElement(exchange.getFault()
.getContent());
f.setDetail(details);
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java?rev=758549&r1=758548&r2=758549&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java Thu Mar 26 08:14:41 2009
@@ -154,6 +154,12 @@
if (soapMessage.get("faultstring") != null) {
messageExchange.setProperty("faultstring", soapMessage.get("faultstring"));
}
+ if (soapMessage.get("faultcode") != null) {
+ messageExchange.setProperty("faultcode", soapMessage.get("faultcode"));
+ }
+ if (soapMessage.get("hasdetail") != null) {
+ messageExchange.setProperty("hasdetail", soapMessage.get("hasdetail"));
+ }
} else if (messageExchange instanceof InOut) {
NormalizedMessage msg = messageExchange.createMessage();
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java?rev=758549&r1=758548&r2=758549&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java Thu Mar 26 08:14:41 2009
@@ -234,25 +234,38 @@
CxfJbiConstants.WSDL11_WRAPPER_NAMESPACE, JbiFault.JBI_FAULT_ROOT));
Node jbiFaultDetail = null;
if (message.getVersion() instanceof Soap11) {
- NodeList nodeList = soapFault.getElementsByTagName("detail");
- if (nodeList == null || nodeList.getLength() == 0) {
- //there is no detail in the fault, which means the fault is
- //thrown during soap header process according to soap spec,
- //try get the mandatory elemenet faultstring
+ NodeList nodeList = soapFault.getElementsByTagName("faultcode");
+ String faultCode = nodeList.item(0).getFirstChild().getTextContent();
+ String prefix = faultCode.substring(0, faultCode.indexOf(":"));
+ String localName = faultCode.substring(faultCode.indexOf(":") + 1);
+ message.put("faultcode", new QName(prefix, localName));
+ nodeList = soapFault.getElementsByTagName("faultstring");
+ message.put("faultstring", nodeList.item(0).getFirstChild().getTextContent());
+ nodeList = soapFault.getElementsByTagName("detail");
+ if (nodeList != null && nodeList.getLength() > 0) {
+ jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
+ } else {
+ message.put("hasdetail", false);
nodeList = soapFault.getElementsByTagName("faultstring");
- message.put("faultstring", nodeList.item(0).getTextContent());
+ jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
}
- jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
+
} else {
- NodeList nodeList = soapFault.getElementsByTagName("soap:Detail");
- if (nodeList == null || nodeList.getLength() == 0) {
- //there is no detail in the fault, which means the fault is
- //thrown during soap header process according to soap spec,
- //try get the mandatory elemenet soap:Reason
- nodeList = soapFault.getElementsByTagName("soap:Reason");
- message.put("faultstring", nodeList.item(0).getTextContent());
+ NodeList nodeList = soapFault.getElementsByTagName("soap:Code");
+ String faultCode = nodeList.item(0).getFirstChild().getTextContent();
+ String prefix = faultCode.substring(0, faultCode.indexOf(":"));
+ String localName = faultCode.substring(faultCode.indexOf(":") + 1);
+ message.put("faultcode", new QName(prefix, localName));
+ nodeList = soapFault.getElementsByTagName("soap:Reason");
+ message.put("faultstring", nodeList.item(0).getFirstChild().getTextContent());
+ nodeList = soapFault.getElementsByTagName("soap:Detail");
+ if (nodeList != null && nodeList.getLength() > 0) {
+ jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
+ } else {
+ message.put("hasdetail", false);
+ nodeList = soapFault.getElementsByTagName("faultstring");
+ jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
}
- jbiFaultDetail = doc.importNode(nodeList.item(0).getFirstChild(), true);
}
Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java?rev=758549&r1=758548&r2=758549&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java Thu Mar 26 08:14:41 2009
@@ -24,12 +24,10 @@
import org.apache.cxf.calculator.CalculatorImpl;
import org.apache.cxf.calculator.CalculatorPortType;
import org.apache.cxf.calculator.CalculatorService;
-import org.apache.cxf.endpoint.Endpoint;
-import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
-import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
-import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.servicemix.tck.SpringTestSupport;
import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
import org.springframework.context.support.AbstractXmlApplicationContext;
@@ -40,21 +38,14 @@
URL wsdl = getClass().getResource("/wsdl/calculator.wsdl");
// start external service
- JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
- factory.setServiceClass(CalculatorPortType.class);
- factory.setServiceBean(new CalculatorImpl());
- factory.setWsdlURL(wsdl.toString());
- factory.setServiceName(new QName("http://apache.org/cxf/calculator",
- "CalculatorService"));
- factory.setBindingId("http://schemas.xmlsoap.org/wsdl/soap12/");
- String address = "http://localhost:9001/bridgetest";
- factory.setAddress(address);
- Server server = factory.create();
- Endpoint endpoint = server.getEndpoint();
+ EndpointImpl endpoint =
+ (EndpointImpl)javax.xml.ws.Endpoint.publish("http://localhost:9001/bridgetest",
+ new CalculatorImpl());
+
endpoint.getInInterceptors().add(new LoggingInInterceptor());
endpoint.getOutInterceptors().add(new LoggingOutInterceptor());
- ServiceInfo service = endpoint.getEndpointInfo().getService();
- assertNotNull(service);
+ endpoint.getInFaultInterceptors().add(new LoggingInInterceptor());
+ endpoint.getOutFaultInterceptors().add(new LoggingOutInterceptor());
// start external client
@@ -62,6 +53,10 @@
CalculatorService service1 = new CalculatorService(wsdl, new QName(
"http://apache.org/cxf/calculator", "CalculatorService"));
CalculatorPortType port = service1.getCalculatorPort();
+ ClientProxy.getClient(port).getInFaultInterceptors().add(new LoggingInInterceptor());
+ ClientProxy.getClient(port).getInInterceptors().add(new LoggingInInterceptor());
+ ClientProxy.getClient(port).getOutFaultInterceptors().add(new LoggingOutInterceptor());
+ ClientProxy.getClient(port).getOutInterceptors().add(new LoggingInInterceptor());
int ret = port.add(1, 2);
assertEquals(ret, 3);
try {