| /* |
| * 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.context; |
| |
| import junit.framework.TestCase; |
| import org.apache.axis2.jaxws.context.factory.MessageContextFactory; |
| import org.apache.axis2.jaxws.core.MessageContext; |
| import org.apache.axis2.jaxws.handler.MEPContext; |
| import org.apache.axis2.jaxws.message.Block; |
| import org.apache.axis2.jaxws.message.Message; |
| import org.apache.axis2.jaxws.message.Protocol; |
| import org.apache.axis2.jaxws.message.XMLFault; |
| import org.apache.axis2.jaxws.message.XMLFaultCode; |
| import org.apache.axis2.jaxws.message.XMLFaultReason; |
| import org.apache.axis2.jaxws.message.databinding.JAXBBlockContext; |
| import org.apache.axis2.jaxws.message.factory.JAXBBlockFactory; |
| import org.apache.axis2.jaxws.message.factory.MessageFactory; |
| import org.apache.axis2.jaxws.registry.FactoryRegistry; |
| import test.EchoString; |
| import test.ObjectFactory; |
| |
| import javax.xml.bind.JAXBContext; |
| import javax.xml.transform.OutputKeys; |
| import javax.xml.transform.Source; |
| import javax.xml.transform.Transformer; |
| import javax.xml.transform.TransformerFactory; |
| import javax.xml.transform.stream.StreamResult; |
| import javax.xml.transform.stream.StreamSource; |
| import javax.xml.ws.LogicalMessage; |
| import javax.xml.ws.handler.LogicalMessageContext; |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| |
| /** |
| * Unit tests for the creation and usage of the LogicalMessageContext that is |
| * used for handler processing. |
| */ |
| public class LogicalMessageContextTests extends TestCase { |
| |
| private final String INPUT = "sample input"; |
| private final String FAULT_INPUT = "sample fault input"; |
| |
| private final String sampleSOAP11FaultPayload = |
| "<soapenv:Fault xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">" |
| + "<faultcode>soapenv:Server</faultcode>" + "<faultstring>" + FAULT_INPUT |
| + "</faultstring>" + "</soapenv:Fault>"; |
| |
| public LogicalMessageContextTests(String name) { |
| super(name); |
| } |
| |
| /** |
| * Test the javax.xml.transform.Source based APIs on the LogicalMessage interface. |
| * @throws Exception |
| */ |
| public void testGetPayloadAsSource() throws Exception { |
| LogicalMessageContext lmc = createSampleContext(); |
| |
| LogicalMessage msg = lmc.getMessage(); |
| assertTrue("The returned LogicalMessage was null", msg != null); |
| |
| Source payload = msg.getPayload(); |
| assertTrue("The returned payload (Source) was null", payload != null); |
| |
| String resultContent = _getStringFromSource(payload); |
| assertTrue("The content returned was null", resultContent != null); |
| assertTrue("The content returned was incomplete, unexpected element", resultContent.indexOf("echoString") > -1); |
| assertTrue("The content returned was incomplete, unexpected content", resultContent.indexOf(INPUT) > -1); |
| } |
| |
| /** |
| * Tests the setting of the payload and make sure we don't cache improperly. |
| * @throws Exception |
| */ |
| public void testGetAndSetPayloadAsSource() throws Exception { |
| LogicalMessageContext lmc = createSampleContext(); |
| |
| LogicalMessage msg = lmc.getMessage(); |
| assertTrue("The returned LogicalMessage was null", msg != null); |
| |
| Source payload = msg.getPayload(); |
| assertTrue("The returned payload (Source) was null", payload != null); |
| |
| String resultContent = _getStringFromSource(payload); |
| assertTrue("The content returned was null", resultContent != null); |
| assertTrue("The content returned was incorrect", resultContent.indexOf(INPUT) > 0); |
| |
| // Now manipluate the content and set it back on the message. |
| int start = resultContent.indexOf(INPUT); |
| int end = start + INPUT.length(); |
| |
| String newInput = "new content goes here"; |
| String newContent = resultContent.substring(0, start) + newInput + resultContent.substring(end); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(newContent.getBytes()); |
| StreamSource newPayload = new StreamSource(bais); |
| |
| msg.setPayload(newPayload); |
| |
| // Check the payload to make sure the new content that we added |
| // was insterted correctly. |
| Source payload2 = msg.getPayload(); |
| assertTrue("The returned payload (Source) was null", payload2 != null); |
| |
| String resultContent2 = _getStringFromSource(payload2); |
| assertTrue("The updated content returned was null", resultContent2 != null); |
| assertTrue("The updated content returned was incorrect, old content found", resultContent2.indexOf(INPUT) < 0); |
| assertTrue("The updated content returned was incorrect, new content not found", resultContent2.indexOf(newInput) > -1); |
| } |
| |
| /** |
| * Test to make sure we can get the payload multiple times from the same LogicalMessage. |
| * @throws Exception |
| */ |
| public void testGetMultiplePayloadsAsSource() throws Exception { |
| LogicalMessageContext lmc = createSampleContext(); |
| |
| LogicalMessage msg = lmc.getMessage(); |
| assertTrue("The returned LogicalMessage was null", msg != null); |
| |
| int loopCount = 3; |
| for (int i = 0; i < loopCount; ++i) { |
| Source payload = msg.getPayload(); |
| assertTrue("Attempt number " + i + " to get the payload (Source) was null", payload != null); |
| |
| |
| String resultContent = _getStringFromSource(payload); |
| assertTrue("The content returned in loop " + i + " was null", resultContent != null); |
| assertTrue("The content returned in loop " + i + " was incomplete, unexpected element", resultContent.indexOf("echoString") > -1); |
| assertTrue("The content returned in loop " + i + " was incomplete, unexpected content", resultContent.indexOf(INPUT) > -1); |
| } |
| } |
| |
| /** |
| * Tests the setting of the payload when the original content is a fault. |
| * @throws Exception |
| */ |
| public void testGetAndSetFaultPayloadAsSource() throws Exception { |
| LogicalMessageContext lmc = createSampleFaultContext(); |
| |
| LogicalMessage msg = lmc.getMessage(); |
| assertTrue("The returned LogicalMessage was null", msg != null); |
| |
| Source payload = msg.getPayload(); |
| assertTrue("The returned payload (Source) was null", payload != null); |
| |
| String resultContent = _getStringFromSource(payload); |
| assertTrue("The content returned was null", resultContent != null); |
| assertTrue("The content returned was incorrect", resultContent.indexOf(FAULT_INPUT) > 0); |
| assertTrue("The content returned was incorrect, no fault found", resultContent.indexOf("Fault") > 0); |
| |
| // Now manipluate the content and set it back on the message. |
| int start = resultContent.indexOf(FAULT_INPUT); |
| int end = start + FAULT_INPUT.length(); |
| |
| String newFaultInput = "new fault content goes here"; |
| String newContent = resultContent.substring(0, start) + newFaultInput + resultContent.substring(end); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(newContent.getBytes()); |
| StreamSource newPayload = new StreamSource(bais); |
| |
| msg.setPayload(newPayload); |
| |
| // Check the payload to make sure the new content that we added |
| // was insterted correctly. |
| Source payload2 = msg.getPayload(); |
| assertTrue("The returned payload (Source) was null", payload2 != null); |
| |
| String resultContent2 = _getStringFromSource(payload2); |
| assertTrue("The updated content returned was null", resultContent2 != null); |
| assertTrue("The updated content returned was incorrect, old content found", resultContent2.indexOf(FAULT_INPUT) < 0); |
| assertTrue("The updated content returned was incorrect, no fault found", resultContent.indexOf("Fault") > 0); |
| assertTrue("The updated content returned was incorrect, new content not found", resultContent2.indexOf(newFaultInput) > -1); |
| } |
| |
| // FIXME: Temporarily comment out test because of build break. |
| // /** |
| // * Test the JAXB based APIs on the LogicalMessage interface. |
| // * @throws Exception |
| // */ |
| // public void testGetPayloadAsJAXB() throws Exception { |
| // LogicalMessageContext lmc = createSampleContext(); |
| // |
| // LogicalMessage msg = lmc.getMessage(); |
| // assertTrue("The returned LogicalMessage was null", msg != null); |
| // |
| // JAXBContext jbc = JAXBContext.newInstance("test"); |
| // |
| // Object obj = msg.getPayload(jbc); |
| // assertTrue("The returned payload (Object) was null", obj != null); |
| // assertTrue("The returned payload (Object) was of the wrong type: " + obj.getClass().getName(), obj.getClass().equals(EchoString.class)); |
| // |
| // EchoString echo = (EchoString) obj; |
| // assertTrue("The EchoString object had null input", echo.getInput() != null); |
| // assertTrue("The EchoString object had bad input: " + echo.getInput(), echo.getInput().equals(INPUT)); |
| // } |
| |
| |
| public void testConvertMessageToFault() throws Exception { |
| LogicalMessageContext lmc = createSampleContext(); |
| |
| LogicalMessage msg = lmc.getMessage(); |
| assertTrue("The returned LogicalMessage was null", msg != null); |
| |
| Source payload = msg.getPayload(); |
| assertTrue("The returned payload (Source) was null", payload != null); |
| |
| String resultContent = _getStringFromSource(payload); |
| assertTrue("The content returned was null", resultContent != null); |
| |
| ByteArrayInputStream bais = new ByteArrayInputStream(sampleSOAP11FaultPayload.getBytes()); |
| StreamSource faultSource = new StreamSource(bais); |
| |
| msg.setPayload(faultSource); |
| |
| Source newFaultSource = msg.getPayload(); |
| assertTrue("The new fault content returned was null", faultSource != null); |
| |
| String newFaultContent = _getStringFromSource(newFaultSource); |
| assertTrue("The new fault content returned was invalid", newFaultContent.equals(sampleSOAP11FaultPayload)); |
| } |
| |
| private LogicalMessageContext createSampleContext() throws Exception { |
| MessageFactory factory = (MessageFactory) FactoryRegistry.getFactory(MessageFactory.class); |
| Message msg = factory.create(Protocol.soap11); |
| |
| // Create a jaxb object |
| ObjectFactory objFactory = new ObjectFactory(); |
| EchoString echo = objFactory.createEchoString(); |
| echo.setInput(INPUT); |
| |
| // Create the necessary JAXBContext |
| JAXBContext jbc = JAXBContext.newInstance("test"); |
| JAXBBlockContext blockCtx = new JAXBBlockContext(jbc); |
| |
| // Create the Block |
| JAXBBlockFactory blockFactory = (JAXBBlockFactory) FactoryRegistry.getFactory(JAXBBlockFactory.class); |
| Block block = blockFactory.createFrom(echo, blockCtx, null); |
| |
| msg.setBodyBlock(block); |
| |
| MessageContext mc = new MessageContext(); |
| mc.setMEPContext(new MEPContext(mc)); |
| mc.setMessage(msg); |
| |
| LogicalMessageContext lmc = MessageContextFactory.createLogicalMessageContext(mc); |
| |
| return lmc; |
| } |
| |
| private LogicalMessageContext createSampleFaultContext() throws Exception { |
| MessageFactory factory = (MessageFactory) FactoryRegistry.getFactory(MessageFactory.class); |
| Message msg = factory.create(Protocol.soap11); |
| |
| XMLFaultReason reason = new XMLFaultReason(FAULT_INPUT); |
| XMLFault fault = new XMLFault(XMLFaultCode.SENDER, reason); |
| msg.setXMLFault(fault); |
| |
| MessageContext mc = new MessageContext(); |
| mc.setMEPContext(new MEPContext(mc)); |
| mc.setMessage(msg); |
| |
| LogicalMessageContext lmc = MessageContextFactory.createLogicalMessageContext(mc); |
| |
| return lmc; |
| } |
| |
| private String _getStringFromSource(Source source) throws Exception { |
| TransformerFactory factory = TransformerFactory.newInstance(); |
| Transformer trans = factory.newTransformer(); |
| |
| ByteArrayOutputStream baos = new ByteArrayOutputStream(); |
| StreamResult result = new StreamResult(baos); |
| |
| trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); |
| trans.transform(source, result); |
| |
| String content = new String(baos.toByteArray()); |
| |
| return content; |
| } |
| } |