/**
* 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.jms.testsuite.testcases;
import java.net.URL;
import java.util.Map;
import javax.jms.DeliveryMode;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Endpoint;
import javax.xml.ws.soap.SOAPFaultException;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.jms.testsuite.services.GreeterSpecImpl;
import org.apache.cxf.jms.testsuite.services.GreeterSpecWithPortError;
import org.apache.cxf.jms_greeter.JMSGreeterPortType;
import org.apache.cxf.jms_greeter.JMSGreeterService;
import org.apache.cxf.jms_greeter.JMSGreeterService2;
import org.apache.cxf.systest.jms.AbstractVmJMSTest;
import org.apache.cxf.transport.common.gzip.GZIPFeature;
import org.apache.cxf.transport.jms.JMSConstants;
import org.apache.cxf.transport.jms.JMSMessageHeadersType;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
public class SoapJmsSpecTest extends AbstractVmJMSTest {
private static final String SERVICE_NS = "http://cxf.apache.org/jms_greeter";
private static final String WSDL = "/wsdl/jms_spec_test.wsdl";
@BeforeClass
public static void startServers() throws Exception {
startBusAndJMS(SoapJmsSpecTest.class);
publish("jms:queue:test.cxf.jmstransport.queue2", new GreeterSpecImpl());
publish("jms:queue:test.cxf.jmstransport.queue5", new GreeterSpecWithPortError());
EndpointImpl ep = (EndpointImpl)Endpoint.create(null, new GreeterSpecImpl());
ep.setBus(bus);
ep.getFeatures().add(new GZIPFeature());
ep.getFeatures().add(cff);
ep.publish("jms:queue:test.cxf.jmstransport.queue6");
}
@Test
public void testSpecJMS() throws Exception {
QName serviceName = new QName(SERVICE_NS, "JMSGreeterService");
QName portName = new QName(SERVICE_NS, "GreeterPort");
URL wsdl = getWSDLURL(WSDL);
JMSGreeterService service = new JMSGreeterService(wsdl, serviceName);
JMSGreeterPortType greeter = markForClose(service.getPort(portName, JMSGreeterPortType.class, cff));
for (int idx = 0; idx < 5; idx++) {
greeter.greetMeOneWay("test String");
String greeting = greeter.greetMe("Milestone-" + idx);
Assert.assertEquals("Hello Milestone-" + idx, greeting);
String reply = greeter.sayHi();
Assert.assertEquals(new String("Bonjour"), reply);
}
}
@Test
public void testWsdlExtensionSpecJMS() throws Exception {
QName serviceName = new QName(SERVICE_NS, "JMSGreeterService");
QName portName = new QName(SERVICE_NS, "GreeterPort");
URL wsdl = getWSDLURL(WSDL);
JMSGreeterService service = new JMSGreeterService(wsdl, serviceName);
JMSGreeterPortType greeter = markForClose(service.getPort(portName, JMSGreeterPortType.class, cff));
Map<String, Object> requestContext = ((BindingProvider)greeter).getRequestContext();
JMSMessageHeadersType requestHeader = new JMSMessageHeadersType();
requestContext.put(JMSConstants.JMS_CLIENT_REQUEST_HEADERS, requestHeader);
String reply = greeter.sayHi();
Assert.assertEquals("Bonjour", reply);
requestContext = ((BindingProvider)greeter).getRequestContext();
requestHeader = (JMSMessageHeadersType)requestContext.get(JMSConstants.JMS_CLIENT_REQUEST_HEADERS);
Assert.assertEquals("1.0", requestHeader.getSOAPJMSBindingVersion());
Assert.assertEquals("\"test\"", requestHeader.getSOAPJMSSOAPAction());
Assert.assertEquals(3000, requestHeader.getTimeToLive());
Assert.assertEquals(DeliveryMode.PERSISTENT, requestHeader.getJMSDeliveryMode());
Assert.assertEquals(7, requestHeader.getJMSPriority());
Map<String, Object> responseContext = ((BindingProvider)greeter).getResponseContext();
JMSMessageHeadersType responseHeader = (JMSMessageHeadersType)responseContext
.get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
Assert.assertEquals("1.0", responseHeader.getSOAPJMSBindingVersion());
Assert.assertEquals(null, responseHeader.getSOAPJMSSOAPAction());
Assert.assertEquals(DeliveryMode.PERSISTENT, responseHeader.getJMSDeliveryMode());
Assert.assertEquals(7, responseHeader.getJMSPriority());
}
@Test
public void testWsdlExtensionSpecJMSPortError() throws Exception {
QName serviceName = new QName(SERVICE_NS, "JMSGreeterService2");
QName portName = new QName(SERVICE_NS, "GreeterPort2");
URL wsdl = getWSDLURL(WSDL);
JMSGreeterService2 service = new JMSGreeterService2(wsdl, serviceName);
JMSGreeterPortType greeter = markForClose(service.getPort(portName, JMSGreeterPortType.class, cff));
String reply = greeter.sayHi();
Assert.assertEquals("Bonjour", reply);
}
@Test
public void testBindingVersionError() throws Exception {
QName serviceName = new QName(SERVICE_NS, "JMSGreeterService");
QName portName = new QName(SERVICE_NS, "GreeterPort");
URL wsdl = getWSDLURL(WSDL);
JMSGreeterService service = new JMSGreeterService(wsdl, serviceName);
JMSGreeterPortType greeter = markForClose(service.getPort(portName, JMSGreeterPortType.class, cff));
BindingProvider bp = (BindingProvider)greeter;
Map<String, Object> requestContext = bp.getRequestContext();
JMSMessageHeadersType requestHeader = new JMSMessageHeadersType();
requestHeader.setSOAPJMSBindingVersion("0.3");
requestContext.put(JMSConstants.JMS_CLIENT_REQUEST_HEADERS, requestHeader);
try {
greeter.greetMe("Milestone-");
Assert.fail("Should have thrown a fault");
} catch (SOAPFaultException ex) {
Assert.assertTrue(ex.getMessage().contains("0.3"));
Map<String, Object> responseContext = bp.getResponseContext();
JMSMessageHeadersType responseHdr = (JMSMessageHeadersType)responseContext
.get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
if (responseHdr == null) {
Assert.fail("response Header should not be null");
}
Assert.assertTrue(responseHdr.isSOAPJMSIsFault());
}
}
@Test
public void testGzip() throws Exception {
URL wsdl = getWSDLURL(WSDL);
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setBus(bus);
factory.setServiceClass(JMSGreeterPortType.class);
factory.setWsdlURL(wsdl.toExternalForm());
factory.getFeatures().add(cff);
factory.getFeatures().add(new GZIPFeature());
factory.setAddress("jms:queue:test.cxf.jmstransport.queue6");
JMSGreeterPortType greeter = (JMSGreeterPortType)markForClose(factory.create());
for (int idx = 0; idx < 5; idx++) {
greeter.greetMeOneWay("test String");
String greeting = greeter.greetMe("Milestone-" + idx);
Assert.assertEquals("Hello Milestone-" + idx, greeting);
String reply = greeter.sayHi();
Assert.assertEquals("Bonjour", reply);
}
}
}