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/27 02:09:33 UTC
svn commit: r758952 - in
/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src:
main/java/org/apache/servicemix/cxfbc/
main/java/org/apache/servicemix/cxfbc/interceptors/
test/java/org/apache/servicemix/cxfbc/
Author: ffang
Date: Fri Mar 27 01:09:32 2009
New Revision: 758952
URL: http://svn.apache.org/viewvc?rev=758952&view=rev
Log:
[SMXCOMP-487]cxf bc provider lost faultstring and faultcode for incoming soap fault message from externel service
Modified:
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java?rev=758952&r1=758951&r2=758952&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java Fri Mar 27 01:09:32 2009
@@ -753,7 +753,12 @@
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/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java?rev=758952&r1=758951&r2=758952&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java Fri Mar 27 01:09:32 2009
@@ -180,6 +180,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();
msg.setContent(soapMessage.getContent(Source.class));
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java?rev=758952&r1=758951&r2=758952&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/interceptors/JbiInWsdl1Interceptor.java Fri Mar 27 01:09:32 2009
@@ -237,31 +237,46 @@
JBIConstants.NS_JBI_BINDING, 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);
+
}
SchemaInfo schemaInfo =
getOperation(message).getBinding().getService().getSchema(jbiFaultDetail.getNamespaceURI());
if (schemaInfo != null && !schemaInfo.isElementFormQualified()) {
//that's unquailied fault
jbiFaultDetail = addEmptyDefaultTns((Element)jbiFaultDetail);
+
}
jbiFault.appendChild(jbiFaultDetail);
message.setContent(Source.class, new DOMSource(doc));
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java?rev=758952&r1=758951&r2=758952&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerTest.java Fri Mar 27 01:09:32 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 {