/**
* 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.cxf.systest.jms;
import java.io.Closeable;
import java.net.URL;
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Endpoint;
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.helpers.IOUtils;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.jms_mtom.JMSMTOMPortType;
import org.apache.cxf.jms_mtom.JMSMTOMService;
import org.apache.cxf.jms_mtom.JMSOutMTOMService;
import org.apache.cxf.testutil.common.EmbeddedJMSBrokerLauncher;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
@Ignore
public class JMSTestMtom {
private static EmbeddedJMSBrokerLauncher broker;
private static Bus bus;
@BeforeClass
public static void startServers() throws Exception {
broker = new EmbeddedJMSBrokerLauncher();
broker.startInProcess();
bus = BusFactory.getDefaultBus();
broker.updateWsdl(bus, "testutils/jms_test_mtom.wsdl");
Object mtom = new JMSMTOMImpl();
EndpointImpl ep = (EndpointImpl)Endpoint
.publish("jms:jndi:dynamicQueues/test.cxf.jmstransport.queue&receiveTimeout=10000", mtom);
Binding binding = ep.getBinding();
((SOAPBinding)binding).setMTOMEnabled(true);
}
@AfterClass
public static void stopServers() throws Exception {
broker.stop();
}
@Test
public void testMTOM() throws Exception {
QName serviceName = new QName("http://cxf.apache.org/jms_mtom", "JMSMTOMService");
QName portName = new QName("http://cxf.apache.org/jms_mtom", "MTOMPort");
URL wsdl = getWSDLURL("/wsdl/jms_test_mtom.wsdl");
JMSMTOMService service = new JMSMTOMService(wsdl, serviceName);
JMSMTOMPortType mtom = service.getPort(portName, JMSMTOMPortType.class);
Binding binding = ((BindingProvider)mtom).getBinding();
((SOAPBinding)binding).setMTOMEnabled(true);
Holder<String> name = new Holder<String>("Sam");
URL fileURL = this.getClass().getResource("/org/apache/cxf/systest/jms/JMSClientServerTest.class");
Holder<DataHandler> handler1 = new Holder<DataHandler>();
handler1.value = new DataHandler(fileURL);
int size = handler1.value.getInputStream().available();
mtom.testDataHandler(name, handler1);
byte bytes[] = IOUtils.readBytesFromStream(handler1.value.getInputStream());
Assert.assertEquals("The response file is not same with the sent file.", size, bytes.length);
((Closeable)mtom).close();
}
@Test
public void testOutMTOM() throws Exception {
QName serviceName = new QName("http://cxf.apache.org/jms_mtom", "JMSMTOMService");
QName portName = new QName("http://cxf.apache.org/jms_mtom", "MTOMPort");
URL wsdl = getWSDLURL("/wsdl/jms_test_mtom.wsdl");
JMSOutMTOMService service = new JMSOutMTOMService(wsdl, serviceName);
JMSMTOMPortType mtom = service.getPort(portName, JMSMTOMPortType.class);
URL fileURL = this.getClass().getResource("/org/apache/cxf/systest/jms/JMSClientServerTest.class");
DataHandler handler1 = new DataHandler(fileURL);
int size = handler1.getInputStream().available();
DataHandler ret = mtom.testOutMtom();
byte bytes[] = IOUtils.readBytesFromStream(ret.getInputStream());
Assert.assertEquals("The response file is not same with the original file.", size, bytes.length);
((Closeable)mtom).close();
}
public static URL getWSDLURL(String s) throws Exception {
URL u = JMSTestMtom.class.getResource(s);
if (u == null) {
throw new IllegalArgumentException("WSDL classpath resource not found " + s);
}
String wsdlString = u.toString().intern();
broker.updateWsdl(bus, wsdlString);
return u;
}
}