package org.apache.axis2.jaxws.provider;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.soap.SOAPEnvelope;
import org.apache.axiom.soap.SOAPModelBuilder;
import org.apache.axis2.jaxws.Constants;
import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.Service.Mode;
import javax.xml.ws.soap.SOAPBinding;
import javax.xml.ws.soap.SOAPFaultException;
import java.io.StringReader;
import junit.framework.Test;
import junit.framework.TestSuite;
public class OMProviderTests extends ProviderTestCase {
String endpointUrl = "http://localhost:6060/axis2/services/OMProviderService.OMProviderPort";
private QName serviceName = new QName("http://ws.apache.org/axis2", "OMProviderService");
private static final String SOAP11_NS_URI = "http://schemas.xmlsoap.org/soap/envelope/";
/**
* SOAP 1.1 header
*/
private static final String SOAP11_ENVELOPE_HEAD = "<?xml version='1.0' encoding='utf-8'?>"
+ "<soapenv:Envelope xmlns:soapenv=\""
+ SOAP11_NS_URI
+ "\">"
+ "<soapenv:Header />" + "<soapenv:Body>";
/**
* SOAP 1.1 footer
*/
private static final String SOAP11_ENVELOPE_TAIL = "</soapenv:Body>"
+ "</soapenv:Envelope>";
private static String request = "<invokeOp>Hello Provider OM</invokeOp>";
private static String SOAPFaultRequest ="<invokeOp>SOAPFault</invokeOp>";
public static Test suite() {
return getTestSetup(new TestSuite(OMProviderTests.class));
}
protected void setUp() throws Exception {
super.setUp();
}
/**
* Test sending a SOAP 1.2 request in MESSAGE mode
*/
public void testOMElementDispatchMessageMode() throws Exception {
// Create the JAX-WS client needed to send the request
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl);
Dispatch<OMElement> dispatch = service.createDispatch(
portName, OMElement.class, Mode.MESSAGE);
// Create the OMElement object with the payload contents. Since
// we're in PAYLOAD mode, we don't have to worry about the envelope.
StringReader sr = new StringReader(SOAP11_ENVELOPE_HEAD+request+SOAP11_ENVELOPE_TAIL);
SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(sr);
SOAPEnvelope om = (SOAPEnvelope) builder.getDocumentElement();
OMElement response = dispatch.invoke(om);
String responseText = response.toStringWithConsume();
assertTrue(responseText.contains("soap"));
assertTrue(responseText.contains("Body"));
assertTrue(responseText.contains("Envelope"));
assertTrue(responseText.contains("Hello Dispatch OM"));
}
/**
* Test sending a SOAP 1.2 request in MESSAGE mode
*/
public void testOMElementDispatchMessageModeSOAPFaultException() throws Exception {
// Create the JAX-WS client needed to send the request
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl);
Dispatch<OMElement> dispatch = service.createDispatch(
portName, OMElement.class, Mode.MESSAGE);
StringReader sr = new StringReader(SOAP11_ENVELOPE_HEAD+SOAPFaultRequest+SOAP11_ENVELOPE_TAIL);
SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(sr);
SOAPEnvelope om = (SOAPEnvelope) builder.getDocumentElement();
OMElement response = null;
try{
response = dispatch.invoke(om);
String responseText = response.toStringWithConsume();
}catch(Exception e){
assertTrue(e instanceof SOAPFaultException);
}
assertTrue(response ==null);
}
public void testOMElementDispatchMessageModeSOAPFault() throws Exception {
// Create the JAX-WS client needed to send the request
Service service = Service.create(serviceName);
service.addPort(portName, SOAPBinding.SOAP11HTTP_BINDING, endpointUrl);
Dispatch<OMElement> dispatch = service.createDispatch(
portName, OMElement.class, Mode.MESSAGE);
BindingProvider bp = (BindingProvider)dispatch;
bp.getRequestContext().put(Constants.THROW_EXCEPTION_IF_SOAP_FAULT, Boolean.FALSE);
StringReader sr = new StringReader(SOAP11_ENVELOPE_HEAD+SOAPFaultRequest+SOAP11_ENVELOPE_TAIL);
SOAPModelBuilder builder = OMXMLBuilderFactory.createSOAPModelBuilder(sr);
SOAPEnvelope om = (SOAPEnvelope) builder.getDocumentElement();
OMElement response = null;
try{
response = dispatch.invoke(om);
String responseText = response.toStringWithConsume();
}catch(Exception e){
fail();
}
assertTrue(response !=null);
assertTrue(response instanceof OMElement);
}
}