blob: 20f71858d542eb307a976c44ce519432ad92224a [file] [log] [blame]
/*
* 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.axis2.jaxws.handler.header.tests;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.apache.axis2.jaxws.TestLogger;
import org.apache.axis2.jaxws.framework.AbstractTestCase;
import javax.xml.namespace.QName;
import javax.xml.ws.Dispatch;
import javax.xml.ws.Service;
import javax.xml.ws.soap.SOAPFaultException;
public class HandlerTests extends AbstractTestCase {
public static Test suite() {
return getTestSetup(new TestSuite(HandlerTests.class));
}
public void testHandler_getHeader_invocation() {
TestLogger.logger.debug("----------------------------------");
TestLogger.logger.debug("test: " + getName());
Object res;
//Add myHeader to SOAPMessage that will be injected by handler.getHeader().
String soapMessage =
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:demo=\"http://demo/\"><soap:Header> <demo:myheader soap:mustUnderstand=\"1\"/></soap:Header><soap:Body><demo:echo><arg0>test</arg0></demo:echo></soap:Body></soap:Envelope>";
String url = "http://localhost:6060/axis2/services/DemoService.DemoServicePort";
QName name = new QName("http://demo/", "DemoService");
QName portName = new QName("http://demo/", "DemoServicePort");
//Create Service
Service s = Service.create(name);
assertNotNull(s);
//add port
s.addPort(portName, null, url);
//Create Dispatch
Dispatch<String> dispatch = s.createDispatch(portName, String.class, Service.Mode.MESSAGE);
assertNotNull(dispatch);
res = dispatch.invoke(soapMessage);
assertNotNull(res);
TestLogger.logger.debug("----------------------------------");
}
public void test_MU_Failure() {
TestLogger.logger.debug("----------------------------------");
TestLogger.logger.debug("test: " + getName());
//Add bad header to SOAPMessage, we expect MU to fail
String soapMessage =
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:demo=\"http://demo/\"><soap:Header> <demo:badHeader soap:mustUnderstand=\"1\"/></soap:Header><soap:Body><demo:echo><arg0>test</arg0></demo:echo></soap:Body></soap:Envelope>";
String url = "http://localhost:6060/axis2/services/DemoService.DemoServicePort";
QName name = new QName("http://demo/", "DemoService");
QName portName = new QName("http://demo/", "DemoServicePort");
try {
//Create Service
Service s = Service.create(name);
assertNotNull(s);
//add port
s.addPort(portName, null, url);
//Create Dispatch
Dispatch<String> dispatch =
s.createDispatch(portName, String.class, Service.Mode.MESSAGE);
assertNotNull(dispatch);
dispatch.invoke(soapMessage);
fail("Did not get expected SOAPFaultException for not understood MustUnderstand header");
TestLogger.logger.debug("----------------------------------");
} catch (SOAPFaultException e) {
TestLogger.logger.debug("Got expected SOAPFault", e);
assertTrue(e.toString().indexOf(
"Must Understand check failed for header soap : {http://demo/}badHeader") !=
-1);
TestLogger.logger.debug("MustUnderstand failed as exptected");
TestLogger.logger.debug("----------------------------------");
}
}
/**
* Test that a mustUnderstand header with a specific SOAP role that the endpoint is acting in
* doesn't cause a NotUnderstood fault if the header QName is one that the handler understands.
*/
public void testSoapRoleActedIn() {
TestLogger.logger.debug("----------------------------------");
TestLogger.logger.debug("test: " + getName());
Object res;
//Add myHeader to SOAPMessage that will be injected by handler.getHeader().
String soapMessage =
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:demo=\"http://demo/\"><soap:Header> <demo:myheader soap:actor=\"http://DemoHandler/Role\" soap:mustUnderstand=\"1\"/></soap:Header><soap:Body><demo:echo><arg0>test</arg0></demo:echo></soap:Body></soap:Envelope>";
String url = "http://localhost:6060/axis2/services/DemoService.DemoServicePort";
QName name = new QName("http://demo/", "DemoService");
QName portName = new QName("http://demo/", "DemoServicePort");
//Create Service
Service s = Service.create(name);
assertNotNull(s);
//add port
s.addPort(portName, null, url);
//Create Dispatch
Dispatch<String> dispatch = s.createDispatch(portName, String.class, Service.Mode.MESSAGE);
assertNotNull(dispatch);
res = dispatch.invoke(soapMessage);
assertNotNull(res);
TestLogger.logger.debug("----------------------------------");
}
/**
* Test that a mustUnderstand header with a specific SOAP role that the endpoint is acting in
* doesn't cause a NotUnderstood fault if the header QName is one that the handler understands.
*/
public void testSoapRoleNotActedIn() {
TestLogger.logger.debug("----------------------------------");
TestLogger.logger.debug("test: " + getName());
Object res;
//Add myHeader to SOAPMessage that will be injected by handler.getHeader().
String soapMessage =
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:demo=\"http://demo/\"><soap:Header> <demo:myheader soap:actor=\"http://DemoHandler/NotActedIn\" soap:mustUnderstand=\"1\"/></soap:Header><soap:Body><demo:echo><arg0>test</arg0></demo:echo></soap:Body></soap:Envelope>";
String url = "http://localhost:6060/axis2/services/DemoService.DemoServicePort";
QName name = new QName("http://demo/", "DemoService");
QName portName = new QName("http://demo/", "DemoServicePort");
//Create Service
Service s = Service.create(name);
assertNotNull(s);
//add port
s.addPort(portName, null, url);
//Create Dispatch
Dispatch<String> dispatch = s.createDispatch(portName, String.class, Service.Mode.MESSAGE);
assertNotNull(dispatch);
res = dispatch.invoke(soapMessage);
assertNotNull(res);
TestLogger.logger.debug("----------------------------------");
}
/**
* Test that a mustUnderstand header with a specific SOAP role that the endpoint is acting in
* which has a mustUnderstand header that will not be processed by the handler causes a fault.
*/
public void testSoapRoleActedInNotUnderstoodFault() {
TestLogger.logger.debug("----------------------------------");
TestLogger.logger.debug("test: " + getName());
//Add myHeader to SOAPMessage that will be injected by handler.getHeader().
String soapMessage =
"<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:demo=\"http://demo/\"><soap:Header> <demo:myNOTUNDERSTOODheader soap:actor=\"http://DemoHandler/Role\" soap:mustUnderstand=\"1\"/></soap:Header><soap:Body><demo:echo><arg0>test</arg0></demo:echo></soap:Body></soap:Envelope>";
String url = "http://localhost:6060/axis2/services/DemoService.DemoServicePort";
QName name = new QName("http://demo/", "DemoService");
QName portName = new QName("http://demo/", "DemoServicePort");
try {
//Create Service
Service s = Service.create(name);
assertNotNull(s);
//add port
s.addPort(portName, null, url);
//Create Dispatch
Dispatch<String> dispatch =
s.createDispatch(portName, String.class, Service.Mode.MESSAGE);
assertNotNull(dispatch);
dispatch.invoke(soapMessage);
fail("Did not received expected notUnderstood fault");
} catch (Exception e) {
TestLogger.logger.debug("Caught expected exception", e);
assertTrue(e.toString().indexOf(
"Must Understand check failed for header soap : {http://demo/}myNOTUNDERSTOODheader") !=
-1);
TestLogger.logger.debug("----------------------------------");
}
}
}