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 2007/11/30 10:11:37 UTC
svn commit: r599747 -
/servicemix/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
Author: ffang
Date: Fri Nov 30 01:11:35 2007
New Revision: 599747
URL: http://svn.apache.org/viewvc?rev=599747&view=rev
Log:
[SM-1158] Cxf BC provider should handle soap message correctly when soap message has empty soap header
[SM-1159] Cxf bc provider should check MessageExchange status before send out the message to avoid "Out not supported" exception.
Modified:
servicemix/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
Modified: servicemix/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java
URL: http://svn.apache.org/viewvc/servicemix/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java?rev=599747&r1=599746&r2=599747&view=diff
==============================================================================
--- servicemix/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java (original)
+++ servicemix/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProviderMessageObserver.java Fri Nov 30 01:11:35 2007
@@ -27,6 +27,7 @@
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;
@@ -42,6 +43,7 @@
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.phase.PhaseManager;
import org.apache.cxf.service.model.BindingOperationInfo;
+import org.apache.cxf.staxutils.DepthXMLStreamReader;
import org.apache.cxf.staxutils.StaxUtils;
import org.apache.cxf.transport.MessageObserver;
import org.apache.servicemix.JbiConstants;
@@ -79,6 +81,10 @@
public void onMessage(Message message) {
try {
+ if (messageExchange.getStatus() != ExchangeStatus.ACTIVE) {
+ return;
+ }
+
contentType = (String) message.get(Message.CONTENT_TYPE);
SoapMessage soapMessage = new SoapMessage(message);
@@ -107,11 +113,11 @@
PhaseInterceptorChain inChain = inboundChainCache.get(pm
.getInPhases(), inList);
- inChain.add(providerEndpoint.getOutInterceptors());
- inChain.add(providerEndpoint.getOutFaultInterceptors());
+ inChain.add(providerEndpoint.getInInterceptors());
+ inChain.add(providerEndpoint.getInFaultInterceptors());
soapMessage.setInterceptorChain(inChain);
inChain.doIntercept(soapMessage);
-
+
if (boi.getOperationInfo().isOneWay()) {
messageExchange.setStatus(ExchangeStatus.DONE);
} else if (soapMessage.get("jbiFault") != null
@@ -159,16 +165,34 @@
private XMLStreamReader createXMLStreamReaderFromMessage(Message message) {
XMLStreamReader xmlReader = null;
+ StreamSource bodySource = new StreamSource(message
+ .getContent(InputStream.class));
+ xmlReader = StaxUtils.createXMLStreamReader(bodySource);
+
+ findBody(message, xmlReader);
+
+ return xmlReader;
+ }
+
+ private void findBody(Message message, XMLStreamReader xmlReader) {
+ DepthXMLStreamReader reader = new DepthXMLStreamReader(xmlReader);
try {
- StreamSource bodySource = new StreamSource(message
- .getContent(InputStream.class));
- xmlReader = StaxUtils.createXMLStreamReader(bodySource);
- xmlReader.nextTag();
- xmlReader.nextTag();
- xmlReader.nextTag();
+ int depth = reader.getDepth();
+ int event = reader.getEventType();
+ while (reader.getDepth() >= depth && reader.hasNext()) {
+ QName name = null;
+ if (event == XMLStreamReader.START_ELEMENT) {
+ name = reader.getName();
+ }
+ if (event == XMLStreamReader.START_ELEMENT && name.equals(((SoapMessage)message).getVersion().getBody())) {
+ reader.nextTag();
+ return;
+ }
+ event = reader.next();
+ }
+ return;
} catch (XMLStreamException e) {
- e.printStackTrace();
+ throw new RuntimeException("Couldn't parse stream.", e);
}
- return xmlReader;
}
-}
\ No newline at end of file
+}