📄 soapserializationenvelopetest.java
字号:
/* Copyright (c) 2006, James Seigel, Calgary, AB., Canada * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or * sell copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */package org.ksoap2.serialization;import java.io.*;import junit.framework.*;import org.ksoap2.*;import org.ksoap2.transport.*;import org.ksoap2.transport.mock.*;import org.kxml2.io.*;import org.xmlpull.v1.*;public class SoapSerializationEnvelopeTest extends TestCase { private static final String PARAMETER_NAME = "aParameter"; private static String FUNCTION_NAME = "FunctionName"; private static String NAMESPACE_NAME = ServiceConnectionFixture.NAMESPACE; private static final String BODY_XML_STRING = "<n0:" + FUNCTION_NAME + " id=\"o0\" n1:root=\"1\" xmlns:n0=\"" + NAMESPACE_NAME + "\" xmlns:n1=\"http://schemas.xmlsoap.org/soap/encoding/\""; private static final String END_XML_STRING = " />"; private static final String END_XML_FUNCTION_STRING = "</n0:" + FUNCTION_NAME + ">"; private KXmlSerializer xmlWriter; private SoapSerializationEnvelope envelope; private ByteArrayOutputStream outputStream; private SoapObject soapObject; private MockTransport myTransport; protected void setUp() throws Exception { super.setUp(); xmlWriter = new KXmlSerializer(); outputStream = new ByteArrayOutputStream(); xmlWriter.setOutput(outputStream, "UTF-8"); envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); envelope.addMapping(NAMESPACE_NAME, ServiceConnectionFixture.RESPONSE_CLASS_NAME, ServiceConnectionFixture.RESPONSE_CLASS); soapObject = new SoapObject(NAMESPACE_NAME, FUNCTION_NAME); myTransport = new MockTransport(); } public void xx_testTwoDimensionalStringArrays() throws Throwable { // can't handle two dimensional arrays. myTransport.parseResponse(envelope, ServiceConnectionFixture.createTwoDimensionalStringArrayResponseAsStream()); Object result = envelope.getResponse(); ServiceConnectionFixture.assertComplexResponseCorrect((ComplexResponse) result); } public void testInbound() throws Throwable { myTransport.parseResponse(envelope, ServiceConnectionFixture.createWorkingNoMultirefAsStream()); Object result = envelope.getResponse(); ServiceConnectionFixture.assertComplexResponseCorrect((ComplexResponse) result); myTransport.parseResponse(envelope, ServiceConnectionFixture.createWorkingAsStream()); result = envelope.getResponse(); ServiceConnectionFixture.assertComplexResponseCorrect((ComplexResponse) result); myTransport.parseResponse(envelope, ServiceConnectionFixture.createWorkingNoMultirefAsStream_reversedResponseParameters()); result = envelope.getResponse(); ServiceConnectionFixture.assertComplexResponseCorrect((ComplexResponse) result); // Can't handle multirefs yet // // myTransport.parseResponse(envelope, // ServiceConnectionFixture.createMultirefAsStream()); // result = envelope.getResult(); // ServiceConnectionFixture.assertComplexResponseCorrect((ComplexResponse) // result); } public void testReadInstance_SoapObject_Reversed() throws Throwable { KXmlParser parser = primedParserForSerializableParameterTest(ServiceConnectionFixture.createWorkingNoMultirefAsStream_reversedResponseParameters()); SoapSerializationEnvelope localEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); SoapObject aSoapObject = (SoapObject) localEnvelope.readUnknown(parser, NAMESPACE_NAME, ServiceConnectionFixture.RESPONSE_CLASS_NAME); assertEquals(ServiceConnectionFixture.theStringResponse, aSoapObject.getProperty(0)); assertEquals("" + ServiceConnectionFixture.theLongResponse, aSoapObject.getProperty(1).toString()); } public void testReadInstance_SoapObject() throws Throwable { KXmlParser parser = primedParserForSerializableParameterTest(ServiceConnectionFixture.createWorkingNoMultirefAsStream()); SoapSerializationEnvelope localEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); SoapObject aSoapObject = (SoapObject) localEnvelope.readUnknown(parser, NAMESPACE_NAME, ServiceConnectionFixture.RESPONSE_CLASS_NAME); assertEquals(ServiceConnectionFixture.theStringResponse, aSoapObject.getProperty(1)); assertEquals("" + ServiceConnectionFixture.theLongResponse, aSoapObject.getProperty(0).toString()); } public void testReadSerializable_ParameterOrderReverse() throws Throwable { ComplexResponse complexResponse = new ComplexResponse(); KXmlParser parser = primedParserForSerializableParameterTest(ServiceConnectionFixture.createWorkingNoMultirefAsStream_reversedResponseParameters()); envelope.readSerializable(parser, complexResponse); ServiceConnectionFixture.assertComplexResponseCorrect(complexResponse); } public void testReadSerializable_ParameterOrderNormal() throws Throwable { ComplexResponse complexResponse = new ComplexResponse(); KXmlParser parser = primedParserForSerializableParameterTest(ServiceConnectionFixture.createWorkingNoMultirefAsStream()); envelope.readSerializable(parser, complexResponse); ServiceConnectionFixture.assertComplexResponseCorrect(complexResponse); } public void testReadSerializable_ParameterOrderNormal_NullNamespace() throws Throwable { ComplexResponse complexResponse = new ComplexResponse(); complexResponse.namespace = null; KXmlParser parser = primedParserForSerializableParameterTest(ServiceConnectionFixture.createWorkingNoMultirefAsStream()); envelope.readSerializable(parser, complexResponse); ServiceConnectionFixture.assertComplexResponseCorrect(complexResponse); } public void testReadSerializable_ParameterOrderNormal_NullNamespace_NullName() { // SF Bug # 1442028 try { ComplexResponse complexResponse = new ComplexResponse(); complexResponse.namespace = null; complexResponse.parameterCount = 2; complexResponse.responseOne_Name = null; KXmlParser parser = primedParserForSerializableParameterTest(ServiceConnectionFixture.createWorkingNoMultirefAsStream()); envelope.readSerializable(parser, complexResponse); ServiceConnectionFixture.assertComplexResponseCorrect(complexResponse); } catch (Throwable e) { assertFalse(e instanceof NullPointerException); } } private KXmlParser primedParserForSerializableParameterTest(InputStream inputStream) throws Throwable { KXmlParser parser = new KXmlParser(); parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true); parser.setInput(inputStream, null); parser.nextTag(); parser.nextTag(); parser.nextTag(); parser.nextTag(); return parser; } public void testWritingBody_WithNullParameter() throws Exception { soapObject.addProperty(PARAMETER_NAME, null); writeBodyWithSoapObject(soapObject); assertEquals(BODY_XML_STRING + ">" + "<" + PARAMETER_NAME + " n2:null=\"true\" xmlns:n2=\"" + envelope.xsi + "\" />" + END_XML_FUNCTION_STRING, new String(outputStream.toByteArray())); } public void testWritingBody_WithPrimitiveBooleanParameters() throws Exception { assertPrimitiveParameterCorrect(Boolean.TRUE, "boolean"); } public void testWritingBody_WithPrimitiveStringParameters() throws Exception { assertPrimitiveParameterCorrect("aStringValue", "string"); } public void testWritingBody_WithPrimitiveIntegerParameters() throws Exception { assertPrimitiveParameterCorrect(new Integer(2), "int"); } public void testWritingBody_WithPrimitiveLongParameters() throws Exception { assertPrimitiveParameterCorrect(new Long(2), "long"); } private void assertPrimitiveParameterCorrect(Object primtiveValue, String type) throws IOException { soapObject.addProperty(PARAMETER_NAME, primtiveValue); writeBodyWithSoapObject(soapObject); assertEquals(BODY_XML_STRING + ">" + getParameterBody(type, primtiveValue) + END_XML_FUNCTION_STRING, new String(outputStream.toByteArray())); } public void testWritingBody_NullBody() throws IOException { envelope.setOutputSoapObject(null); try { envelope.writeBody(xmlWriter); fail(); } catch (NullPointerException e) { // TODO: This should probably do something intelligent instead of // throwing a null pointer exception } } public void testWritingBody_EmptyBody() throws Exception { writeBodyWithSoapObject(soapObject); assertEquals(BODY_XML_STRING + END_XML_STRING, new String(outputStream.toByteArray())); } private String getParameterBody(String type, Object aValue) { return "<" + PARAMETER_NAME + " n3:type=\"n2:" + type + "\" xmlns:n2=\"" + envelope.xsd + "\" xmlns:n3=\"" + envelope.xsi + "\">" + aValue + "</" + PARAMETER_NAME + ">"; } private void writeBodyWithSoapObject(SoapObject soapObject) throws IOException { envelope.setOutputSoapObject(soapObject); envelope.writeBody(xmlWriter); xmlWriter.flush(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -