/* * 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("----------------------------------"); } } }