Author: jochen
Date: Tue Aug 22 18:06:11 2006
New Revision: 433819
URL: http://svn.apache.org/viewvc?rev=433819&view=rev
Log:
Added documentation on custom data types.
Added:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/CustomTypesTest.java
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/XmlRpcWorkerFactory.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/DateSerializer.java
webservices/xmlrpc/trunk/src/changes/changes.xml
webservices/xmlrpc/trunk/src/site/apt/advanced.apt
webservices/xmlrpc/trunk/src/site/fml/faq.fml
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ClientProvider.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalStreamTransportProvider.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalTransportProvider.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/SerializerTest.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ServletWebServerProvider.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/WebServerProvider.java
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/XmlRpcWorkerFactory.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/XmlRpcWorkerFactory.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/XmlRpcWorkerFactory.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/common/XmlRpcWorkerFactory.java
Tue Aug 22 18:06:11 2006
@@ -59,10 +59,10 @@
if (max > 0 && numThreads == max) {
throw new XmlRpcLoadException("Maximum number of
concurrent requests exceeded: " + max);
}
- ++numThreads;
if (max == 0) {
return singleton;
}
+ ++numThreads;
if (pool.size() == 0) {
return newWorker();
} else {
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/parser/DateParser.java
Tue Aug 22 18:06:11 2006
@@ -15,9 +15,9 @@
*/
package org.apache.xmlrpc.parser;
+import java.text.Format;
import java.text.ParseException;
-import org.apache.xmlrpc.util.XmlRpcDateTimeDateFormat;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
@@ -25,11 +25,11 @@
/** Parser for integer values.
*/
public class DateParser extends AtomicParser {
- private final XmlRpcDateTimeDateFormat f;
+ private final Format f;
/** Creates a new instance with the given format.
*/
- public DateParser(XmlRpcDateTimeDateFormat pFormat) {
+ public DateParser(Format pFormat) {
f = pFormat;
}
Modified:
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/DateSerializer.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/DateSerializer.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/DateSerializer.java
(original)
+++
webservices/xmlrpc/trunk/common/src/main/java/org/apache/xmlrpc/serializer/DateSerializer.java
Tue Aug 22 18:06:11 2006
@@ -15,7 +15,8 @@
*/
package org.apache.xmlrpc.serializer;
-import org.apache.xmlrpc.util.XmlRpcDateTimeDateFormat;
+import java.text.Format;
+
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -27,11 +28,11 @@
*/
public static final String DATE_TAG = "dateTime.iso8601";
- private final XmlRpcDateTimeDateFormat format;
+ private final Format format;
/** Creates a new instance with the given formatter.
*/
- public DateSerializer(XmlRpcDateTimeDateFormat pFormat) {
+ public DateSerializer(Format pFormat) {
format = pFormat;
}
Modified: webservices/xmlrpc/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/changes/changes.xml?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/changes/changes.xml (original)
+++ webservices/xmlrpc/trunk/src/changes/changes.xml Tue Aug 22 18:06:11 2006
@@ -48,6 +48,9 @@
due-to-email="[EMAIL PROTECTED]">
Documentation improvements
</action>
+ <action dev="jochen" type="add">
+ Added documentation on custom data types.
+ </action>
</release>
<release version="3.0rc1" date="27-Jul-2006">
<action dev="jochen" type="fix" due-to="Alan Burlison"
Modified: webservices/xmlrpc/trunk/src/site/apt/advanced.apt
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/site/apt/advanced.apt?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/site/apt/advanced.apt (original)
+++ webservices/xmlrpc/trunk/src/site/apt/advanced.apt Tue Aug 22 18:06:11 2006
@@ -81,3 +81,111 @@
to consider, which exception is being trapped: If the method exposes
XmlRpcException, then you'll need to catch the XmlRpcException.
Otherwise, it's UndeclaredThrowableException.
+
+* Custom data types
+
+ Apache XML-RPC was built with extensibility in mind. In particular, it was
+ written to support custom data types.
+
+ The data type handling is completely left to the
+ {{{apidocs/org/apache/xmlrpc/common/TypeFactory.html}TypeFactory}}. In
+ other words, adding support for custom data types is as simple as
+ providing your own type factory. This is typically done by subclassing
+ {{{apidocs/org/apache/xmlrpc/common/TypeFactoryImpl.html}TypeFactoryImpl}}.
+
+ We'll illustrate the concept by creating a type factory, which uses a
+ non-standard date format for transmitting date values. First of all,
+ we've got to implement the subclass:
+
+-----------------------------------------------------------------------------------
+ import java.text.DateFormat;
+ import java.text.SimpleDateFormat;
+ import org.apache.xmlrpc.common.TypeFactoryImpl;
+ import org.apache.xmlrpc.common.XmlRpcController;
+ import org.apache.xmlrpc.parser.DateParser;
+ import org.apache.xmlrpc.parser.TypeParser;
+ import org.apache.xmlrpc.serializer.DateSerializer;
+ import org.apache.xmlrpc.serializer.TypeSerializer;
+ import org.apache.ws.commons.util.NamespaceContextImpl;
+
+ public class MyTypeFactory extends TypeFactoryImpl {
+ public MyTypeFactory(XmlRpcController pController) {
+ super(pController);
+ }
+
+ private DateFormat newFormat() {
+ return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+ }
+
+ public TypeParser getParser(XmlRpcStreamConfig pConfig,
NamespaceContextImpl pContext, String pURI, String pLocalName) {
+ if (DateSerializer.DATE_TAG.equals(pLocalName)) {
+ return new DateParser(pFormat);
+ } else {
+ return super.getParser(pConfig, pContext, pURI, pLocalName);
+ }
+ }
+
+ public TypeSerializer getSerializer(XmlRpcStreamConfig pConfig, Object
pObject) throws SAXException {
+ if (pObject instanceof Date) {
+ return new DateSerializer(newFormat());
+ } else {
+ return super.getSerializer(pConfig, pObject);
+ }
+ }
+ }
+-----------------------------------------------------------------------------------
+
+ On the client side, we've got to tell the
+ {{{apidocs/org/apache/xmlrpc/client/XmlRpcClient.html}XmlRpcClient}} to use
the
+ new factory. That's as simple as typing
+
+-----------------------------------------------------------------------------------
+ XmlRpcClient client = new XmlRpcClient();
+ client.setTypeFactory(new MyTypeFactory());
+-----------------------------------------------------------------------------------
+
+ Things are a little bit more difficult on the server side. Basically all we
need
+ to do is setting the type factory on the
+ {{{apidocs/org/apache/xmlrpc/server/XmlRpcServer.html}XmlRpcServer}}. The
question
+ is, how to obtain the server object. That depends on the environment. If you
+ are using the XmlRpcServlet, then you've got to derive a subclass:
+
+-----------------------------------------------------------------------------------
+ import org.apache.xmlrpc.webserver.XmlRpcServletServer;
+ import org.apache.xmlrpc.webserver.XmlRpcServlet;
+
+ public class MyXmlRpcServlet extends XmlRpcServlet {
+ protected XmlRpcServletServer newXmlRpcServer(ServletConfig pConfig) {
+ XmlRpcServletServer server = super.newXmlRpcServer(pConfig);
+ server.setTypeFactory(new MyTypeFactory(server));
+ return server;
+ }
+ }
+-----------------------------------------------------------------------------------
+
+ And, if you are using the
+ {{{apidocs/org/apache/xmlrpc/webserver/WebServer.html}WebServer}}, you've got
+ to override a similar method:
+
+-----------------------------------------------------------------------------------
+ import java.net.InetAddress;
+ import org.apache.xmlrpc.server.XmlRpcStreamServer;
+ import org.apache.xmlrpc.webserver.WebServer;
+
+ public class MyWebServer extends WebServer {
+ public MyWebServer(int pPort) {
+ super(pPort);
+ }
+
+ public MyWebServer(int pPort, InetAddress pAddr) {
+ super(pPort, pAddr);
+ }
+
+ protected XmlRpcStreamServer newXmlRpcStreamServer() {
+ XmlRpcStreamServer server = new ConnectionServer();
+ server.setTypeFactory(new MyTypeFactory());
+ return server;
+ }
+ }
+-----------------------------------------------------------------------------------
+
\ No newline at end of file
Modified: webservices/xmlrpc/trunk/src/site/fml/faq.fml
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/src/site/fml/faq.fml?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
--- webservices/xmlrpc/trunk/src/site/fml/faq.fml (original)
+++ webservices/xmlrpc/trunk/src/site/fml/faq.fml Tue Aug 22 18:06:11 2006
@@ -66,6 +66,17 @@
]]></source>
</answer>
</faq>
+
+ <faq id="nonstandard_date_format">
+ <question>I've got a server, which is expecting a non-standard
+ date format. How can I ensure, that my date values have the
+ right format?</question>
+ <answer>
+ <p>You've got to use a special type factory. An example is
+ contained in the documentation on
+ {{{advanced.html}advanced topics}}.</p>
+ </answer>
+ </faq>
</part>
<part id="server">
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ClientProvider.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ClientProvider.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ClientProvider.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ClientProvider.java
Tue Aug 22 18:06:11 2006
@@ -17,6 +17,7 @@
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.server.XmlRpcServer;
/** This interface allows to perform a unit test with various
* transports. Basically, the implementation creates the client,
@@ -33,4 +34,9 @@
* @return A client being used for performing the test.
*/
XmlRpcClient getClient();
+
+ /** Returns the providers server instance.
+ * @return A server instance, which is being used for performing the test.
+ */
+ XmlRpcServer getServer();
}
Added:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/CustomTypesTest.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/CustomTypesTest.java?rev=433819&view=auto
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/CustomTypesTest.java
(added)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/CustomTypesTest.java
Tue Aug 22 18:06:11 2006
@@ -0,0 +1,125 @@
+/*
+ * Copyright 1999,2005 The Apache Software Foundation.
+ *
+ * Licensed 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.xmlrpc.test;
+
+import java.io.IOException;
+import java.text.DateFormat;
+import java.text.Format;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+import org.apache.ws.commons.util.NamespaceContextImpl;
+import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.XmlRpcRequest;
+import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
+import org.apache.xmlrpc.client.XmlRpcClientRequestImpl;
+import org.apache.xmlrpc.common.TypeFactory;
+import org.apache.xmlrpc.common.TypeFactoryImpl;
+import org.apache.xmlrpc.common.XmlRpcController;
+import org.apache.xmlrpc.common.XmlRpcStreamConfig;
+import org.apache.xmlrpc.parser.DateParser;
+import org.apache.xmlrpc.parser.TypeParser;
+import org.apache.xmlrpc.serializer.DateSerializer;
+import org.apache.xmlrpc.serializer.TypeSerializer;
+import org.apache.xmlrpc.server.PropertyHandlerMapping;
+import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+import org.apache.xmlrpc.server.XmlRpcServer;
+import org.xml.sax.SAXException;
+
+
+/**
+ * Test suite for working with custom types.
+ */
+public class CustomTypesTest extends XmlRpcTestCase {
+ /**
+ * Sample date converter
+ */
+ public static class DateConverter {
+ /**
+ * Adds one day to the given date.
+ */
+ public Date tomorrow(Date pDate) {
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(pDate);
+ cal.add(Calendar.DAY_OF_MONTH, 1);
+ return cal.getTime();
+ }
+ }
+
+ protected XmlRpcHandlerMapping getHandlerMapping() throws IOException,
XmlRpcException {
+ PropertyHandlerMapping mapping = new PropertyHandlerMapping();
+ mapping.addHandler("DateConverter", DateConverter.class);
+ return mapping;
+ }
+
+ /** Tests using a custom date format.
+ */
+ public void testCustomDateFormat() throws Exception {
+ for (int i = 0; i < providers.length; i++) {
+ testCustomDateFormat(providers[i]);
+ }
+ }
+
+ private TypeFactory getCustomDateTypeFactory(XmlRpcController pController,
final Format pFormat) {
+ return new TypeFactoryImpl(pController){
+ private TypeSerializer dateSerializer = new
DateSerializer(pFormat);
+
+ public TypeParser getParser(XmlRpcStreamConfig pConfig,
NamespaceContextImpl pContext, String pURI, String pLocalName) {
+ if (DateSerializer.DATE_TAG.equals(pLocalName)) {
+ return new DateParser(pFormat);
+ } else {
+ return super.getParser(pConfig, pContext, pURI,
pLocalName);
+ }
+ }
+
+ public TypeSerializer getSerializer(XmlRpcStreamConfig pConfig,
Object pObject) throws SAXException {
+ if (pObject instanceof Date) {
+ return dateSerializer;
+ } else {
+ return super.getSerializer(pConfig, pObject);
+ }
+ }
+
+ };
+ }
+
+ private void testCustomDateFormat(ClientProvider pProvider) throws
Exception {
+ final DateFormat format = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss.SSS");
+ XmlRpcClient client = pProvider.getClient();
+ XmlRpcClientConfigImpl config = getConfig(pProvider);
+ client.setConfig(config);
+ TypeFactory typeFactory = getCustomDateTypeFactory(client, format);
+ client.setTypeFactory(typeFactory);
+ Calendar cal1 = Calendar.getInstance();
+ XmlRpcRequest request = new XmlRpcClientRequestImpl(config,
"DateConverter.tomorrow", new Object[]{cal1.getTime()});
+ final String got = XmlRpcTestCase.writeRequest(client, request);
+ final String expect = "<?xml version=\"1.0\" encoding=\"US-ASCII\"?>"
+ + "<methodCall><methodName>DateConverter.tomorrow</methodName>"
+ + "<params><param><value><dateTime.iso8601>" +
format.format(cal1.getTime())
+ + "</dateTime.iso8601></value></param></params></methodCall>";
+ assertEquals(expect, got);
+
+ XmlRpcServer server = pProvider.getServer();
+ server.setTypeFactory(getCustomDateTypeFactory(server, format));
+ Date date = (Date) client.execute(request);
+ Calendar cal2 = Calendar.getInstance();
+ cal2.setTime(date);
+ cal1.add(Calendar.DAY_OF_MONTH, 1);
+ assertEquals(cal1, cal2);
+ }
+}
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalStreamTransportProvider.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalStreamTransportProvider.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalStreamTransportProvider.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalStreamTransportProvider.java
Tue Aug 22 18:06:11 2006
@@ -20,13 +20,16 @@
import org.apache.xmlrpc.client.XmlRpcTransportFactory;
import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcLocalStreamServer;
+import org.apache.xmlrpc.server.XmlRpcServer;
/** Implementation of [EMAIL PROTECTED] org.apache.xmlrpc.test.BaseTest}
* for testing the [EMAIL PROTECTED]
org.apache.xmlrpc.client.XmlRpcLocalStreamTransport}.
*/
public class LocalStreamTransportProvider extends LocalTransportProvider {
- /** Creates a new instance.
+ private XmlRpcLocalStreamServer server;
+
+ /** Creates a new instance.
* @param pMapping The test servers handler mapping.
*/
public LocalStreamTransportProvider(XmlRpcHandlerMapping pMapping) {
@@ -34,8 +37,13 @@
}
protected XmlRpcTransportFactory getTransportFactory(XmlRpcClient
pClient) {
- XmlRpcLocalStreamTransportFactory factory
- = new XmlRpcLocalStreamTransportFactory(pClient, new
XmlRpcLocalStreamServer());
+ server = new XmlRpcLocalStreamServer();
+ XmlRpcLocalStreamTransportFactory factory
+ = new XmlRpcLocalStreamTransportFactory(pClient,
server);
return factory;
}
+
+ public XmlRpcServer getServer() {
+ return server;
+ }
}
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalTransportProvider.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalTransportProvider.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalTransportProvider.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/LocalTransportProvider.java
Tue Aug 22 18:06:11 2006
@@ -20,13 +20,16 @@
import org.apache.xmlrpc.client.XmlRpcLocalTransportFactory;
import org.apache.xmlrpc.client.XmlRpcTransportFactory;
import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
+import org.apache.xmlrpc.server.XmlRpcServer;
/** Implementation of [EMAIL PROTECTED] org.apache.xmlrpc.test.BaseTest}
* for testing the [EMAIL PROTECTED]
org.apache.xmlrpc.client.XmlRpcLocalTransport}.
*/
public class LocalTransportProvider extends ClientProviderImpl {
- /** Creates a new instance.
+ private XmlRpcServer server;
+
+ /** Creates a new instance.
* @param pMapping The test servers handler mapping.
*/
public LocalTransportProvider(XmlRpcHandlerMapping pMapping) {
@@ -40,7 +43,12 @@
public XmlRpcClientConfigImpl getConfig() throws Exception {
XmlRpcClientConfigImpl config = super.getConfig();
- config.setXmlRpcServer(getXmlRpcServer());
+ server = getXmlRpcServer();
+ config.setXmlRpcServer(server);
return config;
}
+
+ public XmlRpcServer getServer() {
+ return server;
+ }
}
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/SerializerTest.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/SerializerTest.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/SerializerTest.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/SerializerTest.java
Tue Aug 22 18:06:11 2006
@@ -15,7 +15,6 @@
*/
package org.apache.xmlrpc.test;
-import java.io.StringWriter;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
@@ -23,15 +22,13 @@
import junit.framework.TestCase;
-import org.apache.ws.commons.serialize.XMLWriter;
-import org.apache.ws.commons.serialize.XMLWriterImpl;
import org.apache.xmlrpc.XmlRpcRequest;
import org.apache.xmlrpc.client.XmlRpcClient;
+import org.apache.xmlrpc.client.XmlRpcClientConfig;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.client.XmlRpcClientRequestImpl;
import org.apache.xmlrpc.client.XmlRpcSunHttpTransportFactory;
import org.apache.xmlrpc.common.XmlRpcStreamRequestConfig;
-import org.apache.xmlrpc.serializer.XmlRpcWriter;
import org.xml.sax.SAXException;
@@ -60,15 +57,8 @@
protected String writeRequest(XmlRpcStreamRequestConfig pConfig,
XmlRpcRequest pRequest)
throws SAXException {
- StringWriter sw = new StringWriter();
- XMLWriter xw = new XMLWriterImpl();
- xw.setEncoding("US-ASCII");
- xw.setDeclarating(true);
- xw.setIndenting(false);
- xw.setWriter(sw);
- XmlRpcWriter xrw = new XmlRpcWriter(pConfig, xw,
client.getTypeFactory());
- xrw.write(pRequest);
- return sw.toString();
+ client.setConfig((XmlRpcClientConfig) pConfig);
+ return XmlRpcTestCase.writeRequest(client, pRequest);
}
/** Test serialization of a byte parameter.
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ServletWebServerProvider.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ServletWebServerProvider.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ServletWebServerProvider.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/ServletWebServerProvider.java
Tue Aug 22 18:06:11 2006
@@ -35,6 +35,7 @@
*/
public class ServletWebServerProvider extends ClientProviderImpl {
protected final ServletWebServer webServer;
+ protected final XmlRpcServlet servlet;
private final boolean contentLength;
private final int port;
@@ -46,7 +47,7 @@
protected ServletWebServerProvider(XmlRpcHandlerMapping pMapping,
boolean pContentLength) throws ServletException, IOException {
super(pMapping);
contentLength = pContentLength;
- XmlRpcServlet servlet = new XmlRpcServlet();
+ servlet = new XmlRpcServlet();
webServer = new ServletWebServer(servlet, 0);
XmlRpcServer server = servlet.getXmlRpcServletServer();
server.setHandlerMapping(mapping);
@@ -71,4 +72,8 @@
protected XmlRpcTransportFactory getTransportFactory(XmlRpcClient
pClient) {
return new XmlRpcSunHttpTransportFactory(pClient);
}
+
+ public XmlRpcServer getServer() {
+ return servlet.getXmlRpcServletServer();
+ }
}
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/WebServerProvider.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/WebServerProvider.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/WebServerProvider.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/WebServerProvider.java
Tue Aug 22 18:06:11 2006
@@ -62,4 +62,8 @@
isActive = true;
}
}
+
+ public XmlRpcServer getServer() {
+ return webServer.getXmlRpcServer();
+ }
}
Modified:
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
URL:
http://svn.apache.org/viewvc/webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java?rev=433819&r1=433818&r2=433819&view=diff
==============================================================================
---
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
(original)
+++
webservices/xmlrpc/trunk/tests/src/test/java/org/apache/xmlrpc/test/XmlRpcTestCase.java
Tue Aug 22 18:06:11 2006
@@ -16,18 +16,26 @@
package org.apache.xmlrpc.test;
import java.io.IOException;
+import java.io.StringWriter;
import javax.servlet.ServletException;
+import junit.framework.TestCase;
+
+import org.apache.ws.commons.serialize.XMLWriter;
+import org.apache.ws.commons.serialize.XMLWriterImpl;
import org.apache.xmlrpc.XmlRpcException;
+import org.apache.xmlrpc.XmlRpcRequest;
+import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfig;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.apache.xmlrpc.common.TypeConverterFactory;
import org.apache.xmlrpc.common.TypeConverterFactoryImpl;
+import org.apache.xmlrpc.common.XmlRpcStreamConfig;
+import org.apache.xmlrpc.serializer.XmlRpcWriter;
import org.apache.xmlrpc.server.PropertyHandlerMapping;
import org.apache.xmlrpc.server.XmlRpcHandlerMapping;
-
-import junit.framework.TestCase;
+import org.xml.sax.SAXException;
/** Abstract base class for deriving test cases.
@@ -76,5 +84,18 @@
protected TypeConverterFactory getTypeConverterFactory() {
return new TypeConverterFactoryImpl();
+ }
+
+ static String writeRequest(XmlRpcClient pClient, XmlRpcRequest pRequest)
+ throws SAXException {
+ StringWriter sw = new StringWriter();
+ XMLWriter xw = new XMLWriterImpl();
+ xw.setEncoding("US-ASCII");
+ xw.setDeclarating(true);
+ xw.setIndenting(false);
+ xw.setWriter(sw);
+ XmlRpcWriter xrw = new XmlRpcWriter((XmlRpcStreamConfig)
pClient.getConfig(), xw, pClient.getTypeFactory());
+ xrw.write(pRequest);
+ return sw.toString();
}
}