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 2008/02/18 08:42:57 UTC
svn commit: r628637 - in
/servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src:
main/java/org/apache/servicemix/cxfbc/ test/java/org/apache/servicemix/cxfbc/
test/java/org/apache/servicemix/cxfbc/mtom/ test/resour...
Author: ffang
Date: Sun Feb 17 23:42:56 2008
New Revision: 628637
URL: http://svn.apache.org/viewvc?rev=628637&view=rev
Log:
[SM-1232] Mtom not working correctly with cxf-bc provider
Added:
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerMtomTest.java (with props)
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.xml (with props)
Modified:
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java
servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.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/CxfBcProvider.java?rev=628637&r1=628636&r2=628637&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/main/java/org/apache/servicemix/cxfbc/CxfBcProvider.java Sun Feb 17 23:42:56 2008
@@ -20,10 +20,12 @@
import java.io.OutputStream;
import java.net.URI;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Logger;
+import javax.activation.DataHandler;
import javax.jbi.management.DeploymentException;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.NormalizedMessage;
@@ -38,16 +40,22 @@
import com.ibm.wsdl.Constants;
import org.apache.cxf.Bus;
+import org.apache.cxf.attachment.AttachmentImpl;
import org.apache.cxf.binding.AbstractBindingFactory;
import org.apache.cxf.binding.soap.SoapMessage;
+
import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor;
import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
import org.apache.cxf.bus.spring.SpringBusFactory;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.endpoint.EndpointImpl;
+import org.apache.cxf.interceptor.AttachmentOutInterceptor;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.interceptor.StaxOutInterceptor;
+
+
+import org.apache.cxf.message.Attachment;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.ExchangeImpl;
import org.apache.cxf.message.Message;
@@ -66,6 +74,8 @@
import org.apache.cxf.wsdl11.WSDLServiceFactory;
import org.apache.servicemix.common.endpoints.ProviderEndpoint;
import org.apache.servicemix.cxfbc.interceptors.JbiOutWsdl1Interceptor;
+import org.apache.servicemix.cxfbc.interceptors.MtomCheckInterceptor;
+import org.apache.servicemix.jbi.messaging.NormalizedMessageImpl;
import org.apache.servicemix.soap.util.DomUtil;
import org.springframework.core.io.Resource;
@@ -104,6 +114,8 @@
private Conduit conduit;
+ private Service cxfService;
+
private boolean mtomEnabled;
public void processExchange(MessageExchange exchange) {
@@ -112,6 +124,7 @@
public void process(MessageExchange exchange) throws Exception {
NormalizedMessage nm = exchange.getMessage("in");
+
CxfBcProviderMessageObserver obs = new CxfBcProviderMessageObserver(exchange, this);
conduit.setMessageObserver(obs);
@@ -131,9 +144,26 @@
cxfExchange.put(BindingOperationInfo.class, boi);
cxfExchange.put(Endpoint.class, ep);
+ cxfExchange.put(Service.class, cxfService);
PhaseChainCache outboundChainCache = new PhaseChainCache();
PhaseManager pm = getBus().getExtension(PhaseManager.class);
List<Interceptor> outList = new ArrayList<Interceptor>();
+ if (isMtomEnabled()) {
+ List<Attachment> attachmentList = new ArrayList<Attachment>();
+ NormalizedMessageImpl norMessage = (NormalizedMessageImpl)nm;
+ Iterator<String> iter = norMessage.listAttachments();
+ while (iter.hasNext()) {
+ String id = iter.next();
+ DataHandler dh = norMessage.getAttachment(id);
+ attachmentList.add(new AttachmentImpl(id, dh));
+ }
+ outList.add(new MtomCheckInterceptor(true));
+ outList.add(new AttachmentOutInterceptor());
+ message.setAttachments(attachmentList);
+ message.put(Message.CONTENT_TYPE, "application/octet-stream");
+ }
+
+
outList.add(new JbiOutWsdl1Interceptor());
outList.add(new SoapPreProtocolOutInterceptor());
outList.add(new SoapOutInterceptor(getBus()));
@@ -230,8 +260,7 @@
description);
WSDLServiceFactory factory = new WSDLServiceFactory(getBus(),
definition, service);
- Service cxfService = factory.create();
-
+ cxfService = factory.create();
ei = cxfService.getServiceInfos().iterator().next()
.getEndpoints().iterator().next();
for (ServiceInfo serviceInfo : cxfService.getServiceInfos()) {
@@ -260,6 +289,7 @@
//init transport
ei.setAddress(locationURI.toString());
+
ConduitInitiatorManager conduitMgr = getBus().getExtension(ConduitInitiatorManager.class);
ConduitInitiator conduitInit = conduitMgr.getConduitInitiator("http://schemas.xmlsoap.org/soap/http");
conduit = conduitInit.getConduit(ei);
Added: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerMtomTest.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/CxfBcProviderConsumerMtomTest.java?rev=628637&view=auto
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerMtomTest.java (added)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerMtomTest.java Sun Feb 17 23:42:56 2008
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.servicemix.cxfbc;
+
+import java.io.InputStream;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Proxy;
+import java.lang.reflect.UndeclaredThrowableException;
+
+import javax.activation.DataHandler;
+import javax.mail.util.ByteArrayDataSource;
+import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Holder;
+import javax.xml.ws.soap.SOAPBinding;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.endpoint.Client;
+import org.apache.cxf.endpoint.ClientImpl;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.endpoint.Server;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.jaxws.JaxWsClientProxy;
+import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
+import org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl;
+import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
+import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
+import org.apache.cxf.mime.TestMtom;
+import org.apache.cxf.service.Service;
+import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.servicemix.cxfbc.mtom.TestMtomImpl;
+import org.apache.servicemix.tck.SpringTestSupport;
+import org.apache.xbean.spring.context.ClassPathXmlApplicationContext;
+import org.springframework.context.support.AbstractXmlApplicationContext;
+
+public class CxfBcProviderConsumerMtomTest extends SpringTestSupport {
+
+ public static final QName MTOM_PORT = new QName(
+ "http://cxf.apache.org/mime", "TestMtomPort");
+
+ public static final QName MTOM_SERVICE = new QName(
+ "http://cxf.apache.org/mime", "TestMtomService");
+
+ public void testBridge() throws Exception {
+ // start external service
+ JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
+ factory.setServiceClass(TestMtom.class);
+ factory.setServiceBean(new TestMtomImpl());
+ String address = "http://localhost:9001/mtombridgetest";
+ factory.setAddress(address);
+ Server server = factory.create();
+ Endpoint endpoint = server.getEndpoint();
+ endpoint.getInInterceptors().add(new LoggingInInterceptor());
+ endpoint.getOutInterceptors().add(new LoggingOutInterceptor());
+ ServiceInfo service = endpoint.getEndpointInfo().getService();
+ assertNotNull(service);
+
+ // start external client
+ TestMtom mtomPort = createPort(MTOM_SERVICE, MTOM_PORT, TestMtom.class,
+ true);
+ 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");
+ mtomPort.testXop(name, param);
+ assertEquals("call detailfoobar",
+ name.value);
+ assertNotNull(param.value);
+ InputStream bis = param.value.getDataSource().getInputStream();
+ byte b[] = new byte[10];
+ bis.read(b, 0, 10);
+ String attachContent = new String(b);
+ assertEquals(attachContent, "testfoobar");
+ } catch (UndeclaredThrowableException ex) {
+ throw (Exception) ex.getCause();
+ }
+
+ }
+
+ @Override
+ protected AbstractXmlApplicationContext createBeanFactory() {
+ return new ClassPathXmlApplicationContext(
+ "org/apache/servicemix/cxfbc/mtom_bridge.xml");
+ }
+
+ private <T> T createPort(QName serviceName, QName portName,
+ Class<T> serviceEndpointInterface, boolean enableMTOM)
+ throws Exception {
+ Bus bus = BusFactory.getDefaultBus();
+ ReflectionServiceFactoryBean serviceFactory = new JaxWsServiceFactoryBean();
+ serviceFactory.setBus(bus);
+ serviceFactory.setServiceName(serviceName);
+ serviceFactory.setServiceClass(serviceEndpointInterface);
+ serviceFactory.setWsdlURL(getClass().getResource("/wsdl/mtom_xop.wsdl"));
+ Service service = serviceFactory.create();
+ EndpointInfo ei = service.getEndpointInfo(portName);
+ JaxWsEndpointImpl jaxwsEndpoint = new JaxWsEndpointImpl(bus, service,
+ ei);
+ SOAPBinding jaxWsSoapBinding = new SOAPBindingImpl(ei.getBinding());
+ jaxWsSoapBinding.setMTOMEnabled(enableMTOM);
+
+ Client client = new ClientImpl(bus, jaxwsEndpoint);
+ InvocationHandler ih = new JaxWsClientProxy(client, jaxwsEndpoint
+ .getJaxwsBinding());
+ Object obj = Proxy.newProxyInstance(serviceEndpointInterface
+ .getClassLoader(), new Class[] {serviceEndpointInterface,
+ BindingProvider.class}, ih);
+ return serviceEndpointInterface.cast(obj);
+ }
+
+}
Propchange: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerMtomTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcProviderConsumerMtomTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Modified: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.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/mtom/TestMtomImpl.java?rev=628637&r1=628636&r2=628637&view=diff
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java (original)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/mtom/TestMtomImpl.java Sun Feb 17 23:42:56 2008
@@ -25,12 +25,14 @@
import javax.mail.util.ByteArrayDataSource;
import javax.xml.ws.Holder;
+import org.apache.cxf.mime.TestMtom;
+
@WebService(serviceName = "TestMtomService",
portName = "TestMtomPort",
targetNamespace = "http://cxf.apache.org/mime",
endpointInterface = "org.apache.cxf.mime.TestMtom",
wsdlLocation = "testutils/mtom_xop.wsdl")
-public class TestMtomImpl {
+public class TestMtomImpl implements TestMtom {
public void testXop(Holder<String> name, Holder<DataHandler> attachinfo) {
try {
@@ -49,5 +51,9 @@
}
+ public org.apache.cxf.mime.types.XopStringType testXopString(
+ org.apache.cxf.mime.types.XopStringType data) {
+ return null;
+ }
}
Added: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.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/mtom_bridge.xml?rev=628637&view=auto
==============================================================================
--- servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.xml (added)
+++ servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.xml Sun Feb 17 23:42:56 2008
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+-->
+<beans xmlns:sm="http://servicemix.apache.org/config/1.0"
+ xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
+ xmlns:mtom="http://cxf.apache.org/mime">
+
+ <sm:container id="jbi" embedded="true">
+
+ <sm:endpoints>
+ <cxfbc:consumer wsdl="/wsdl/mtom_xop.wsdl"
+ service="mtom:TestMtomService"
+ endpoint="TestMtomPort"
+ targetEndpoint="TestMtomPortProxy"
+ targetService="mtom:TestMtomService"
+ targetInterface="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:consumer>
+
+ <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>
+
+</beans>
Propchange: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.xml
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: servicemix/smx3/branches/servicemix-3.2/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/mtom_bridge.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml