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/04/14 04:44:39 UTC
svn commit: r764663 - in
/servicemix/smx3/branches/servicemix-3.2/deployables:
bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/
bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/
bindingcom...
Author: ffang
Date: Tue Apr 14 02:44:39 2009
New Revision: 764663
URL: http://svn.apache.org/viewvc?rev=764663&view=rev
Log:
[SMXCOMP-32]CXF-SE client proxies should support MTOM/attachments
Modified:
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider.xml
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/interceptors/AttachmentInInterceptor.java
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.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/CxfBcProviderTest.java?rev=764663&r1=764662&r2=764663&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderTest.java Tue Apr 14 02:44:39 2009
@@ -22,6 +22,7 @@
import javax.jbi.messaging.InOut;
import javax.xml.namespace.QName;
+import javax.xml.ws.soap.SOAPBinding;
import org.apache.cxf.calculator.CalculatorImpl;
import org.apache.cxf.calculator.CalculatorPortType;
@@ -30,11 +31,13 @@
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.service.model.ServiceInfo;
import org.apache.hello_world_soap_http.Greeter;
import org.apache.hello_world_soap_http.GreeterImpl;
import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.cxfbc.mtom.TestMtomImpl;
import org.apache.servicemix.cxfse.CxfSeComponent;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
@@ -94,7 +97,7 @@
}
- public void testTargetServiceNotExist() throws Exception {
+ public void xtestTargetServiceNotExist() throws Exception {
client = new DefaultServiceMixClient(jbi);
io = client.createInOutExchange();
io.setService(new QName("http://apache.org/hello_world_soap_http", "SOAPServiceProvider"));
@@ -115,6 +118,36 @@
}
+ public void testMtom() throws Exception {
+ //start external service
+ EndpointImpl endpointMtom =
+ (EndpointImpl)javax.xml.ws.Endpoint.publish("http://localhost:9001/mtombridgetest",
+ new TestMtomImpl());
+
+ SOAPBinding binding = (SOAPBinding)endpointMtom.getBinding();
+ binding.setMTOMEnabled(true);
+ endpointMtom.getInInterceptors().add(new LoggingInInterceptor());
+ endpointMtom.getOutInterceptors().add(new LoggingOutInterceptor());
+ client = new DefaultServiceMixClient(jbi);
+ io = client.createInOutExchange();
+ io.setService(new QName("http://apache.org/hello_world_soap_http", "SOAPServiceProvider"));
+ io.setInterfaceName(new QName("http://apache.org/hello_world_soap_http", "Greeter"));
+ io.setOperation(new QName("http://apache.org/hello_world_soap_http", "greetMe"));
+ //send message to proxy
+ io.getInMessage().setContent(new StringSource(
+ "<message xmlns='http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper'>"
+ + "<part> "
+ + "<greetMe xmlns='http://apache.org/hello_world_soap_http/types'><requestType>"
+ + "ffang with mtom"
+ + "</requestType></greetMe>"
+ + "</part> "
+ + "</message>"));
+ client.sendSync(io);
+ assertTrue(new SourceTransformer().contentToString(
+ io.getOutMessage()).indexOf("testfoobar") >= 0);
+
+ }
+
public void testProvider() throws Exception {
LOG.info("test provider");
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.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/GreeterImplForProvider.java?rev=764663&r1=764662&r2=764663&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/GreeterImplForProvider.java Tue Apr 14 02:44:39 2009
@@ -16,15 +16,21 @@
*/
package org.apache.servicemix.cxfbc;
+import java.io.InputStream;
+import java.lang.reflect.UndeclaredThrowableException;
import java.util.concurrent.Future;
+import javax.activation.DataHandler;
import javax.jbi.component.ComponentContext;
import javax.jws.WebService;
+import javax.mail.util.ByteArrayDataSource;
import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.Holder;
import javax.xml.ws.Response;
import org.apache.cxf.calculator.AddNumbersFault;
import org.apache.cxf.calculator.CalculatorPortType;
+import org.apache.cxf.mime.TestMtom;
import org.apache.hello_world_soap_http.BadRecordLitFault;
import org.apache.hello_world_soap_http.Greeter;
import org.apache.hello_world_soap_http.NoSuchCodeLitFault;
@@ -51,6 +57,7 @@
private Greeter greeter;
private Greeter securityGreeter;
private HelloPortType hello;
+ private TestMtom mtom;
public String greetMe(String me) {
String ret = "";
@@ -95,6 +102,24 @@
getCalculator().add(1, 2);
} else if ("ffang with no targetServie".equals(me)) {
getCalculatorNotExist().add(1, 2);
+ } else if ("ffang with mtom".equals(me)) {
+ try {
+
+ Holder<DataHandler> param = new Holder<DataHandler>();
+
+ param.value = new DataHandler(new ByteArrayDataSource("foobar".getBytes(),
+ "application/octet-stream"));
+
+ Holder<String> name = new Holder<String>("call detail");
+ getMtom().testXop(name, param);
+ InputStream bis = param.value.getDataSource().getInputStream();
+ byte b[] = new byte[10];
+ bis.read(b, 0, 10);
+ String attachContent = new String(b);
+ ret = ret + attachContent;
+ } catch (UndeclaredThrowableException ex) {
+ throw (Exception) ex.getCause();
+ }
}
} catch (AddNumbersFault e) {
@@ -254,6 +279,15 @@
}
+ public void setMtom(TestMtom mtom) {
+ this.mtom = mtom;
+ }
+
+ public TestMtom getMtom() {
+ return mtom;
+ }
+
+
class MultiClientThread extends Thread {
private CalculatorPortType port;
private int index;
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider.xml?rev=764663&r1=764662&r2=764663&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider.xml (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider.xml Tue Apr 14 02:44:39 2009
@@ -23,7 +23,8 @@
xmlns:test="urn:test"
xmlns:hello="uri:HelloWorld"
xmlns:calculator="http://apache.org/cxf/calculator"
- xmlns:greeter="http://apache.org/hello_world_soap_http">
+ xmlns:greeter="http://apache.org/hello_world_soap_http"
+ xmlns:mtom="http://cxf.apache.org/mime">
<sm:container id="jbi" embedded="true">
@@ -88,6 +89,27 @@
<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
</cxfbc:outFaultInterceptors>
</cxfbc:provider>
+
+ <cxfbc:provider wsdl="/wsdl/mtom_xop.wsdl"
+ locationURI="http://localhost:9001/mtombridgetest"
+ service="mtom:TestMtomService"
+ endpoint="TestMtomPortProxy"
+ interfaceName="mtom:TestMtom"
+ mtomEnabled="true"
+ >
+ <cxfbc:inInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+ </cxfbc:inInterceptors>
+ <cxfbc:outInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+ </cxfbc:outInterceptors>
+ <cxfbc:inFaultInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+ </cxfbc:inFaultInterceptors>
+ <cxfbc:outFaultInterceptors>
+ <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+ </cxfbc:outFaultInterceptors>
+ </cxfbc:provider>
</sm:endpoints>
</sm:container>
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml?rev=764663&r1=764662&r2=764663&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean.xml Tue Apr 14 02:44:39 2009
@@ -23,7 +23,8 @@
xmlns:test="urn:test"
xmlns:hello="uri:HelloWorld"
xmlns:calculator="http://apache.org/cxf/calculator"
- xmlns:greeter="http://apache.org/hello_world_soap_http">
+ xmlns:greeter="http://apache.org/hello_world_soap_http"
+ xmlns:mtom="http://cxf.apache.org/mime">
<cxfse:endpoint>
@@ -41,6 +42,9 @@
<property name="hello">
<cxfse:proxy service="hello:HelloService" context="#context" type="uri.helloworld.HelloPortType"/>
</property>
+ <property name="mtom">
+ <cxfse:proxy service="mtom:TestMtomService" context="#context" type="org.apache.cxf.mime.TestMtom" mtomEnabled="true"/>
+ </property>
</bean>
</cxfse:pojo>
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java?rev=764663&r1=764662&r2=764663&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java Tue Apr 14 02:44:39 2009
@@ -33,6 +33,8 @@
import org.apache.cxf.transport.jbi.JBITransportFactory;
import org.apache.servicemix.client.ClientFactory;
import org.apache.servicemix.client.ServiceMixClient;
+import org.apache.servicemix.cxfse.interceptors.AttachmentInInterceptor;
+import org.apache.servicemix.cxfse.interceptors.AttachmentOutInterceptor;
import org.apache.servicemix.jbi.container.JBIContainer;
import org.springframework.beans.factory.DisposableBean;
@@ -73,6 +75,8 @@
private boolean useJBIWrapper = true;
private boolean useSOAPEnvelope = true;
+
+ private boolean mtomEnabled;
public Object getObject() throws Exception {
if (proxy == null) {
@@ -120,6 +124,12 @@
removeInterceptor(ClientProxy.getClient(retProxy).getEndpoint()
.getBinding().getOutInterceptors(), "StaxOutInterceptor");
}
+ if (isMtomEnabled()) {
+ ClientProxy.getClient(retProxy).getEndpoint()
+ .getBinding().getInInterceptors().add(new AttachmentInInterceptor());
+ ClientProxy.getClient(retProxy).getEndpoint()
+ .getBinding().getOutInterceptors().add(new AttachmentOutInterceptor());
+ }
return retProxy;
}
@@ -301,5 +311,13 @@
public boolean isUseSOAPEnvelope() {
return useSOAPEnvelope;
}
+
+ public void setMtomEnabled(boolean mtomEnabled) {
+ this.mtomEnabled = mtomEnabled;
+ }
+
+ public boolean isMtomEnabled() {
+ return mtomEnabled;
+ }
}
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/interceptors/AttachmentInInterceptor.java
URL: http://svn.apache.org/viewvc/servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/interceptors/AttachmentInInterceptor.java?rev=764663&r1=764662&r2=764663&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/interceptors/AttachmentInInterceptor.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/serviceengines/servicemix-cxf-se/src/main/java/org/apache/servicemix/cxfse/interceptors/AttachmentInInterceptor.java Tue Apr 14 02:44:39 2009
@@ -42,8 +42,12 @@
public void handleMessage(Message message) {
List<Attachment> attachmentList = new ArrayList<Attachment>();
MessageExchange exchange = message.get(MessageExchange.class);
- NormalizedMessage norMessage =
- (NormalizedMessage) exchange.getMessage("in");
+ NormalizedMessage norMessage = null;
+ if (isRequestor(message)) {
+ norMessage = (NormalizedMessage) exchange.getMessage("out");
+ } else {
+ norMessage = (NormalizedMessage) exchange.getMessage("in");
+ }
Set names = norMessage.getAttachmentNames();
for (Object obj : names) {
String id = (String)obj;
@@ -54,5 +58,8 @@
message.setAttachments(attachmentList);
}
-
+ protected boolean isRequestor(Message message) {
+ return Boolean.TRUE.equals(message.get(Message.REQUESTOR_ROLE));
+ }
+
}