This is an automated email from the ASF dual-hosted git repository. ffang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push: new 644a651 [CAMEL-12326]Improve CamelCxfClientImpl a bit ensure it can handle camel side usecase 644a651 is described below commit 644a6515ad0f577ef14a68fb415454e2fabb976a Author: Freeman Fang <freeman.f...@gmail.com> AuthorDate: Wed Mar 7 13:08:15 2018 +0800 [CAMEL-12326]Improve CamelCxfClientImpl a bit ensure it can handle camel side usecase --- .../apache/camel/component/cxf/CxfEndpoint.java | 76 ++++++++++++++++++++++ .../component/cxf/CxfPayLoadBareSoapTest.java | 5 +- 2 files changed, 79 insertions(+), 2 deletions(-) diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java index be1f609..5a80cb1 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java @@ -1180,7 +1180,83 @@ public class CxfEndpoint extends DefaultEndpoint implements AsyncEndpoint, Heade public Bus getBus() { return bus; } + + @Override + protected Object[] processResult(Message message, org.apache.cxf.message.Exchange exchange, + BindingOperationInfo oi, Map<String, Object> resContext) + throws Exception { + Exception ex = null; + // Check to see if there is a Fault from the outgoing chain if it's an out Message + if (!message.get(Message.INBOUND_MESSAGE).equals(Boolean.TRUE)) { + ex = message.getContent(Exception.class); + } + boolean mepCompleteCalled = false; + if (ex != null) { + completeExchange(exchange); + mepCompleteCalled = true; + if (message.getContent(Exception.class) != null) { + throw ex; + } + } + ex = message.getExchange().get(Exception.class); + if (ex != null) { + if (!mepCompleteCalled) { + completeExchange(exchange); + } + throw ex; + } + + Integer responseCode = (Integer)exchange.get(Message.RESPONSE_CODE); + if (null != responseCode && 202 == responseCode) { + Endpoint ep = exchange.getEndpoint(); + if (null != ep && null != ep.getEndpointInfo() && null == ep.getEndpointInfo() + .getProperty("org.apache.cxf.ws.addressing.MAPAggregator.decoupledDestination")) { + return null; + } + } + + // Wait for a response if we need to + if (oi != null && !oi.getOperationInfo().isOneWay()) { + waitResponse(exchange); + } + + // leave the input stream open for the caller + Boolean keepConduitAlive = (Boolean)exchange.get(Client.KEEP_CONDUIT_ALIVE); + if (keepConduitAlive == null || !keepConduitAlive) { + completeExchange(exchange); + } + + // Grab the response objects if there are any + List<Object> resList = null; + Message inMsg = exchange.getInMessage(); + if (inMsg != null) { + if (null != resContext) { + resContext.putAll(inMsg); + // remove the recursive reference if present + resContext.remove(Message.INVOCATION_CONTEXT); + responseContext.put(Thread.currentThread(), resContext); + } + resList = CastUtils.cast(inMsg.getContent(List.class)); + } + + // check for an incoming fault + ex = getException(exchange); + + if (ex != null) { + throw ex; + } + if (resList != null) { + return resList.toArray(); + } + + return null; + } + + private void completeExchange(org.apache.cxf.message.Exchange exchange) { + getConduitSelector().complete(exchange); + } + @SuppressWarnings("unchecked") @Override protected void setParameters(Object[] params, Message message) { diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java index 8d517dd..0da4d16 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfPayLoadBareSoapTest.java @@ -26,7 +26,8 @@ import org.apache.camel.builder.RouteBuilder; import org.apache.camel.test.AvailablePortFinder; import org.apache.camel.test.junit4.CamelTestSupport; import org.apache.cxf.BusFactory; -import org.apache.cxf.frontend.ClientProxyFactoryBean; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; + import org.junit.BeforeClass; import org.junit.Test; @@ -64,7 +65,7 @@ public class CxfPayLoadBareSoapTest extends CamelTestSupport { @Test public void testInvokeProxyService() { - ClientProxyFactoryBean factory = new ClientProxyFactoryBean(); + JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(BareSoapService.class); factory.setAddress(PROXY_URL); factory.setBus(BusFactory.newInstance().createBus()); -- To stop receiving notification emails like this one, please contact ff...@apache.org.