package test.encoding; import junit.framework.TestCase; import org.apache.axis.MessageContext; import org.apache.axis.encoding.DeserializationContext; import org.apache.axis.encoding.SerializationContext; import org.apache.axis.encoding.SerializationContext; import org.apache.axis.message.RPCElement; import org.apache.axis.message.RPCParam; import org.apache.axis.message.SOAPEnvelope; import org.apache.axis.server.AxisServer; import org.xml.sax.InputSource; import javax.xml.soap.MessageFactory; import javax.xml.soap.SOAPMessage; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.io.ByteArrayOutputStream; import java.io.OutputStreamWriter; import java.io.ByteArrayInputStream; /** Little serialization test with a struct. */ public class TestString extends TestCase { public static final String myNS = "urn:myNS"; public TestString(String name) { super(name); } private void runtest(String value, String expected) throws Exception { MessageContext msgContext = new MessageContext(new AxisServer()); MessageFactory factory = MessageFactory.newInstance(); org.apache.axis.Message message = (org.apache.axis.Message) factory.createMessage(); message.setMessageContext(msgContext); String requestEncoding = "UTF-8"; msgContext.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, requestEncoding); message.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, requestEncoding); RPCParam input = new RPCParam("urn:myNamespace", "testParam", value); RPCElement body = new RPCElement("urn:myNamespace", "method1", new Object[]{ input }); message.getSOAPBody().addChildElement(body); ByteArrayOutputStream baos = new ByteArrayOutputStream(); message.writeTo(baos); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); DeserializationContext dser = new DeserializationContext( new InputSource(bais), msgContext, org.apache.axis.Message.REQUEST); dser.parse(); org.apache.axis.message.SOAPEnvelope env = dser.getEnvelope(); RPCElement rpcElem = (RPCElement)env.getFirstBody(); RPCParam output = rpcElem.getParam("testParam"); assertNotNull("No param", output); String result = (String)output.getObjectValue(); assertNotNull("No value for testParam param", result); assertEquals("Expected result not received.", expected, result); } private void runtest(String value) throws Exception { runtest(value, value); } public void testSimpleString() throws Exception { runtest("a simple string"); } public void testStringWithApostrophes() throws Exception { runtest("this isn't a simple string"); } public void testStringWithEntities() throws Exception { runtest("&<>'"", "&<>'""); } public void testStringWithRawEntities() throws Exception { runtest("&<>'\"", "&<>'\""); } public void testStringWithLeadingAndTrailingSpaces() throws Exception { runtest(" centered "); } public void testWhitespace() throws Exception { runtest(" \n \t "); // note: \r fails } public void testFrenchAccents() throws Exception { runtest("\u00e0\u00e2\u00e4\u00e7\u00e8\u00e9\u00ea\u00eb\u00ee\u00ef\u00f4\u00f6\u00f9\u00fb\u00fc"); } public void testFrenchAccents2() throws Exception { runtest("Une chaîne avec des caractères accentués"); } public void testGermanUmlauts() throws Exception { runtest(" Some text \u00df with \u00fc special \u00f6 chars \u00e4."); } public void testWelcomeUnicode() throws Exception { // welcome in several languages runtest( "Chinese (trad.) : \u6b61\u8fce "); } public void testWelcomeUnicode2() throws Exception { // welcome in several languages runtest( "Greek : \u03ba\u03b1\u03bb\u03ce\u03c2 \u03bf\u03c1\u03af\u03c3\u03b1\u03c4\u03b5"); } public void testWelcomeUnicode3() throws Exception { // welcome in several languages runtest( "Japanese : \u3088\u3046\u3053\u305d"); } }