You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/04/27 14:07:01 UTC
svn commit: r533071 -
/incubator/servicemix/branches/servicemix-3.1/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java
Author: gnodet
Date: Fri Apr 27 05:07:00 2007
New Revision: 533071
URL: http://svn.apache.org/viewvc?view=rev&rev=533071
Log:
SM-940: OneWay operation are not supported on jsr181
Modified:
incubator/servicemix/branches/servicemix-3.1/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java
Modified: incubator/servicemix/branches/servicemix-3.1/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java?view=diff&rev=533071&r1=533070&r2=533071
==============================================================================
--- incubator/servicemix/branches/servicemix-3.1/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java (original)
+++ incubator/servicemix/branches/servicemix-3.1/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java Fri Apr 27 05:07:00 2007
@@ -20,10 +20,10 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
+import java.net.URI;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
-import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessageExchangeFactory;
import javax.jbi.messaging.NormalizedMessage;
@@ -36,6 +36,7 @@
import org.apache.servicemix.jbi.jaxp.StAXSourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
+import org.apache.servicemix.jbi.messaging.MessageExchangeSupport;
import org.apache.servicemix.jsr181.JBIContext;
import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.XFireException;
@@ -59,10 +60,15 @@
public static final String JBI_ENDPOINT = "jbi.endpoint";
public static final String JBI_SECURITY_PROPAGATATION = "jbi.security.propagation";
- private static ThreadLocal transformer = new ThreadLocal();
+ private static ThreadLocal<StAXSourceTransformer> transformer = new ThreadLocal<StAXSourceTransformer>();
+
+ public JbiChannel(String uri, JbiTransport transport) {
+ setTransport(transport);
+ setUri(uri);
+ }
protected static StAXSourceTransformer getTransformer() {
- StAXSourceTransformer t = (StAXSourceTransformer) transformer.get();
+ StAXSourceTransformer t = transformer.get();
if (t == null) {
t = new StAXSourceTransformer();
transformer.set(t);
@@ -70,11 +76,6 @@
return t;
}
- public JbiChannel(String uri, JbiTransport transport) {
- setTransport(transport);
- setUri(uri);
- }
-
public void open() throws Exception {
}
@@ -83,7 +84,8 @@
final OutputStream out = (OutputStream) context.getProperty(Channel.BACKCHANNEL_URI);
if (out != null) {
try {
- final XMLStreamWriter writer = getTransformer().getOutputFactory().createXMLStreamWriter(out, message.getEncoding());
+ final XMLStreamWriter writer = getTransformer().getOutputFactory()
+ .createXMLStreamWriter(out, message.getEncoding());
message.getSerializer().writeMessage(message, writer, context);
writer.close();
} catch (XMLStreamException e) {
@@ -95,52 +97,57 @@
try {
DeliveryChannel channel = ((JbiTransport) getTransport()).getContext().getDeliveryChannel();
MessageExchangeFactory factory = channel.createExchangeFactory();
- if (context.getExchange().hasOutMessage()) {
- InOut me = factory.createInOutExchange();
- me.setInterfaceName((QName) context.getService().getProperty(JBI_INTERFACE_NAME));
- me.setOperation(context.getExchange().getOperation().getQName());
- me.setService((QName) context.getService().getProperty(JBI_SERVICE_NAME));
- me.setEndpoint((ServiceEndpoint) context.getService().getProperty(JBI_ENDPOINT));
- NormalizedMessage msg = me.createMessage();
- me.setInMessage(msg);
- if (Boolean.TRUE.equals(context.getService().getProperty(JBI_SECURITY_PROPAGATATION))) {
- MessageExchange oldMe = JBIContext.getMessageExchange();
- NormalizedMessage oldMsg = (oldMe != null) ? oldMe.getMessage("in") : null;
- if (oldMsg != null) {
- msg.setSecuritySubject(oldMsg.getSecuritySubject());
- }
+ URI mep = null;
+ if (context.getExchange().getOperation().getOutputMessage() != null) {
+ mep = MessageExchangeSupport.IN_OUT;
+ } else if (context.getExchange().getOperation().getFaults().size() > 0) {
+ mep = MessageExchangeSupport.ROBUST_IN_ONLY;
+ } else {
+ mep = MessageExchangeSupport.IN_ONLY;
+ }
+ MessageExchange me = factory.createExchange(mep);
+ me.setInterfaceName((QName) context.getService().getProperty(JBI_INTERFACE_NAME));
+ me.setOperation(context.getExchange().getOperation().getQName());
+ me.setService((QName) context.getService().getProperty(JBI_SERVICE_NAME));
+ me.setEndpoint((ServiceEndpoint) context.getService().getProperty(JBI_ENDPOINT));
+ NormalizedMessage msg = me.createMessage();
+ me.setMessage(msg, "in");
+ if (Boolean.TRUE.equals(context.getService().getProperty(JBI_SECURITY_PROPAGATATION))) {
+ MessageExchange oldMe = JBIContext.getMessageExchange();
+ NormalizedMessage oldMsg = (oldMe != null) ? oldMe.getMessage("in") : null;
+ if (oldMsg != null) {
+ msg.setSecuritySubject(oldMsg.getSecuritySubject());
}
- msg.setContent(getContent(context, message));
- if (!channel.sendSync(me)) {
- throw new XFireException("Unable to send jbi exchange: sendSync returned false");
+ }
+ msg.setContent(getContent(context, message));
+ if (!channel.sendSync(me)) {
+ throw new XFireException("Unable to send jbi exchange: sendSync returned false");
+ }
+ if (me.getStatus() == ExchangeStatus.ERROR) {
+ if (me.getError() != null) {
+ throw new XFireFault(me.getError(), XFireFault.RECEIVER);
+ } else {
+ throw new XFireFault("Unkown Error", XFireFault.RECEIVER);
}
- if (me.getStatus() == ExchangeStatus.ERROR) {
- me.setStatus(ExchangeStatus.DONE);
- channel.send(me);
- if (me.getError() != null) {
- throw new XFireFault(me.getError(), XFireFault.RECEIVER);
- } else {
- throw new XFireFault("Unkown Error", XFireFault.RECEIVER);
- }
- } else if (me.getFault() != null){
+ } else if (me.getStatus() == ExchangeStatus.ACTIVE) {
+ if (me.getFault() != null) {
JDOMResult result = new JDOMResult();
String str = getTransformer().contentToString(me.getFault());
getTransformer().toResult(new StringSource(str), result);
Element e = result.getDocument().getRootElement();
e = (Element) e.clone();
+ me.setStatus(ExchangeStatus.DONE);
+ channel.send(me);
XFireFault xfireFault = new XFireFault(str, XFireFault.RECEIVER);
xfireFault.getDetail().addContent(e);
throw xfireFault;
+ } else if (me.getMessage("out") != null) {
+ Source outSrc = me.getMessage("out").getContent();
+ InMessage inMessage = new InMessage(getTransformer().toXMLStreamReader(outSrc), getUri());
+ getEndpoint().onReceive(context, inMessage);
+ me.setStatus(ExchangeStatus.DONE);
+ channel.send(me);
}
- Source outSrc = me.getOutMessage().getContent();
-
- InMessage inMessage = new InMessage(getTransformer().toXMLStreamReader(outSrc), getUri());
- getEndpoint().onReceive(context, inMessage);
-
- me.setStatus(ExchangeStatus.DONE);
- channel.send(me);
- } else {
- // TODO
}
} catch (XFireException e) {
throw e;
@@ -150,15 +157,15 @@
}
}
- protected Source getContent(MessageContext context, OutMessage message) throws XMLStreamException, IOException, XFireException {
+ protected Source getContent(MessageContext context,
+ OutMessage message) throws XMLStreamException, IOException, XFireException {
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
- XMLStreamWriter writer = getTransformer().getOutputFactory().createXMLStreamWriter(outStream, message.getEncoding());
+ XMLStreamWriter writer = getTransformer().getOutputFactory()
+ .createXMLStreamWriter(outStream, message.getEncoding());
MessageSerializer serializer = context.getOutMessage().getSerializer();
- if (serializer == null)
- {
- AbstractSoapBinding binding = (AbstractSoapBinding) context.getBinding();
- if (binding == null)
- {
+ if (serializer == null) {
+ AbstractSoapBinding binding = (AbstractSoapBinding) context.getBinding();
+ if (binding == null) {
throw new XFireException("Couldn't find the binding!");
}
serializer = AbstractSoapBinding.getSerializer(binding.getStyle(), binding.getUse());
@@ -166,8 +173,7 @@
serializer.writeMessage(message, writer, context);
writer.close();
outStream.close();
- StreamSource src = new StreamSource(new ByteArrayInputStream(outStream.toByteArray()));
- return src;
+ return new StreamSource(new ByteArrayInputStream(outStream.toByteArray()));
}
}