You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ru...@apache.org on 2001/08/08 21:52:54 UTC
cvs commit: xml-axis/java/test/RPCDispatch Service.java TestSerializedRPC.java
rubys 01/08/08 12:52:54
Modified: java/src/org/apache/axis/encoding SerializationContext.java
java/test/RPCDispatch Service.java TestSerializedRPC.java
Log:
Ensure that no detectable changes are made to the request in conversion
to a DOM. Notes:
1) pretty indenting of requests and responses are temporarily disabled as
they use a common mechanism.
2) As RPCParams are not MessageElements, one can't getAsDOM them. Pity.
Revision Changes Path
1.30 +8 -5 xml-axis/java/src/org/apache/axis/encoding/SerializationContext.java
Index: SerializationContext.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/encoding/SerializationContext.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- SerializationContext.java 2001/08/08 18:48:59 1.29
+++ SerializationContext.java 2001/08/08 19:52:54 1.30
@@ -78,6 +78,7 @@
public class SerializationContext
{
private static final boolean DEBUG_LOG = false;
+ private static final boolean pretty = false;
public NSStack nsStack = new NSStack();
@@ -310,11 +311,12 @@
}
if (writingStartTag) {
- writer.write(">\n");
+ writer.write(">");
+ if (pretty) writer.write(">\n");
indent++;
}
- for (int i=0; i<indent; i++) writer.write(' ');
+ if (pretty) for (int i=0; i<indent; i++) writer.write(' ');
StringBuffer buf = new StringBuffer();
String elementQName = qName2String(qName);
buf.append("<");
@@ -361,19 +363,20 @@
nsStack.peek().clear();
if (writingStartTag) {
- writer.write("/>\n");
+ writer.write("/>");
+ if (pretty) writer.write("/>");
writingStartTag = false;
return;
}
if (onlyXML) {
indent--;
- for (int i=0; i<indent; i++) writer.write(' ');
+ if (pretty) for (int i=0; i<indent; i++) writer.write(' ');
}
writer.write("</");
writer.write(elementQName);
writer.write('>');
- if (indent>0) writer.write('\n');
+ if (pretty) if (indent>0) writer.write('\n');
writer.flush();
onlyXML=true;
}
1.5 +26 -0 xml-axis/java/test/RPCDispatch/Service.java
Index: Service.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/RPCDispatch/Service.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Service.java 2001/07/17 14:08:32 1.4
+++ Service.java 2001/08/08 19:52:54 1.5
@@ -1,6 +1,12 @@
package test.RPCDispatch;
+import org.apache.axis.message.RPCElement;
+import org.apache.axis.message.RPCParam;
+import org.apache.axis.Message;
import org.apache.axis.MessageContext;
+import org.apache.axis.utils.DOM2Writer;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
/**
* Test WebService
@@ -32,6 +38,26 @@
*/
public String targetService(MessageContext mc) throws Exception {
return mc.getTargetService();
+ }
+
+ /**
+ * Return the target service (should be this!)
+ */
+ public String argAsDOM(MessageContext mc, Data input) throws Exception {
+
+ // get the first parameter
+ Message message = mc.getRequestMessage();
+ RPCElement body = (RPCElement)message.getAsSOAPEnvelope().getFirstBody();
+ NodeList parms = body.getAsDOM().getChildNodes();
+ Node parm1 = null;
+ for (int i=0; i<parms.getLength(); i++) {
+ parm1 = parms.item(i);
+ if (parm1.getNodeType() == Node.ELEMENT_NODE) break;
+ }
+
+ // convert it to a DOM and back to a string, and return the result.
+ return DOM2Writer.nodeToString(parm1, true);
+
}
/**
1.6 +20 -1 xml-axis/java/test/RPCDispatch/TestSerializedRPC.java
Index: TestSerializedRPC.java
===================================================================
RCS file: /home/cvs/xml-axis/java/test/RPCDispatch/TestSerializedRPC.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- TestSerializedRPC.java 2001/08/07 18:58:48 1.5
+++ TestSerializedRPC.java 2001/08/08 19:52:54 1.6
@@ -50,7 +50,7 @@
// Register the reverseString service
SOAPService reverse = new SOAPService(RPCDispatcher, "RPCDispatcher");
reverse.addOption("className", "test.RPCDispatch.Service");
- reverse.addOption("methodName", "reverseString reverseData");
+ reverse.addOption("methodName", "*");
engine.deployService(SOAPAction, reverse);
}
@@ -160,6 +160,25 @@
arg += "</arg0>";
Data expected = new Data(3, "cba", 5);
assertEquals(expected, rpc("reverseData", arg, true));
+ }
+
+ /**
+ * Test DOM round tripping
+ */
+ public void testArgAsDOM() throws Exception {
+ BeanSerializer ser = new BeanSerializer(Data.class);
+ DeserializerFactory dSerFactory = BeanSerializer.getFactory();
+ QName qName = new QName("urn:foo", "Data");
+ engine.registerTypeMapping(qName, Data.class, dSerFactory,
+ ser);
+
+ // invoke the service and verify the result
+ String arg = "<arg0 xmlns:foo=\"urn:foo\" xsi:type=\"foo:Data\">";
+ arg += "<field1>5</field1><field2>abc</field2><field3>3</field3>";
+ arg += "</arg0>";
+
+ // invoke the service and verify the result
+ assertEquals(arg, rpc("argAsDOM", arg, false));
}
public static void main(String args[]) {