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 gd...@apache.org on 2001/09/16 21:58:46 UTC
cvs commit: xml-axis/java/test build_functional_tests.xml
gdaniels 01/09/16 12:58:46
Modified: java/samples/transport/tcp TCPTransport.java
java/src/org/apache/axis Message.java
java/src/org/apache/axis/client ServiceClient.java
Transport.java
java/src/org/apache/axis/providers/java RPCProvider.java
java/src/org/apache/axis/security/simple
SimpleSecurityProvider.java
java/src/org/apache/axis/transport/http AxisServlet.java
HTTPTransport.java
java/src/org/apache/axis/transport/local LocalSender.java
java/test build_functional_tests.xml
Log:
Fix a bunch of bugs/issues that have been hanging around:
* MessageContext now gets reset() each time invoke() in the ServiceClient
is called. This makes sure to clear out transient properties -
MessageContext is per message, not per session/connection. In concert
with this, we now keep a hash of properties in the ServiceClient which
are copied into the freshly reset MessageContext on each request, which is
how we persist things. Timeout and maintainSession have been moved up
into the ServiceClient as members, and are set accordingly.
* We needed a way to retrieve transport-specific things such as cookie
headers from a returned MessageContext. The Transport class now has a
processReturnedMessageContext() method, defined as a no-op in the base
class. If you override it, you can get access to the MessageContext
which comes back just like setupMessageContext() can get to the one
that's about to go out. See HTTPTransport for an example of how to
use this - this is how we get back the session cookies and store them
so they get set next time through setupMessageContext().
* Add a little more debugging stuff to RPCProvider
* Remove erroneous setting of HTTP transport from within LocalSender
* Copy users.lst into build dir so that functional stock test works
* Add the beginnings of HTTP GET functionality (i.e. use a browser
to access http://localhost/axis/Calculator.jws?method=add&arg0=1&arg1=23
and get back the result). This is not clean / finished yet.
Revision Changes Path
1.9 +4 -4 xml-axis/java/samples/transport/tcp/TCPTransport.java
Index: TCPTransport.java
===================================================================
RCS file: /home/cvs/xml-axis/java/samples/transport/tcp/TCPTransport.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- TCPTransport.java 2001/09/05 17:22:58 1.8
+++ TCPTransport.java 2001/09/16 19:58:45 1.9
@@ -110,15 +110,15 @@
String urlString = mc.getStrProp(MessageContext.TRANS_URL);
if (urlString != null) {
URL url = new URL(urlString);
- mc.setProperty(HOST, url.getHost());
- mc.setProperty(PORT, new Integer(url.getPort()).toString());
+ host = url.getHost();
+ port = new Integer(url.getPort()).toString();
}
} catch (java.net.MalformedURLException e) {
// Do nothing here?
}
- if (host != null) serv.set(HOST, host);
- if (port != null) serv.set(PORT, port);
+ if (host != null) mc.setProperty(HOST, host);
+ if (port != null) mc.setProperty(PORT, port);
category.debug( "Port = " + mc.getStrProp(PORT));
category.debug( "Host = " + mc.getStrProp(HOST));
1.45 +1 -0 xml-axis/java/src/org/apache/axis/Message.java
Index: Message.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/Message.java,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- Message.java 2001/09/05 17:22:59 1.44
+++ Message.java 2001/09/16 19:58:45 1.45
@@ -188,6 +188,7 @@
try {
getAsSOAPEnvelope();
} catch (Exception e) {
+ category.fatal("Couldn't make envelope", e);
return null;
}
}
1.51 +35 -6 xml-axis/java/src/org/apache/axis/client/ServiceClient.java
Index: ServiceClient.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/ServiceClient.java,v
retrieving revision 1.50
retrieving revision 1.51
diff -u -r1.50 -r1.51
--- ServiceClient.java 2001/09/05 17:22:59 1.50
+++ ServiceClient.java 2001/09/16 19:58:45 1.51
@@ -184,6 +184,13 @@
// The message context we use across invocations
private MessageContext msgContext;
+ // Collection of properties to store and put in MessageContext at
+ // invoke() time
+ private Hashtable myProperties = null;
+
+ private int timeout;
+ private boolean maintainSession;
+
// Our Transport, if any
private Transport transport;
private String transportName;
@@ -320,7 +327,12 @@
* @param value the value of the property.
*/
public void set (String name, Object value) {
- msgContext.setProperty(name, value);
+ if (name == null || value == null)
+ return;
+ if (myProperties == null) {
+ myProperties = new Hashtable();
+ }
+ myProperties.put(name, value);
}
/**
@@ -330,7 +342,8 @@
* @return the property's value.
*/
public Object get (String name) {
- return msgContext.getProperty(name);
+ return (name == null || myProperties == null) ? null :
+ myProperties.get(name);
}
/**
@@ -339,7 +352,7 @@
* @param value the maximum amount of time, in milliseconds
*/
public void setTimeout (int value) {
- msgContext.setTimeout(value);
+ timeout = value;
}
/**
@@ -348,7 +361,7 @@
* @return value the maximum amount of time, in milliseconds
*/
public int getTimeout () {
- return msgContext.getTimeout();
+ return timeout;
}
/**
@@ -381,7 +394,7 @@
* @param yesno true if session state is desired, false if not.
*/
public void setMaintainSession (boolean yesno) {
- msgContext.setMaintainSession(yesno);
+ maintainSession = yesno;
}
/**
@@ -525,7 +538,6 @@
msgContext.setRequestMessage(reqMsg);
msgContext.setResponseMessage(resMsg);
- msgContext.setServiceDescription(this.serviceDesc);
reqEnv.addBodyElement(body);
reqEnv.setMessageType(ServiceDescription.REQUEST);
@@ -618,7 +630,21 @@
public void invoke() throws AxisFault {
category.debug("Enter: Service::invoke()" );
+ msgContext.reset();
+
+ msgContext.setTimeout(timeout);
+
+ if (myProperties != null) {
+ Enumeration enum = myProperties.keys();
+ while (enum.hasMoreElements()) {
+ String name = (String) enum.nextElement();
+ Object value = myProperties.get(name);
+ msgContext.setProperty(name, value);
+ }
+ }
+
msgContext.setServiceDescription(serviceDesc);
+ msgContext.setMaintainSession(maintainSession);
// set up message context if there is a transport
if (transport != null) {
@@ -629,6 +655,9 @@
try {
engine.invoke( msgContext );
+
+ if (transport != null)
+ transport.processReturnedMessageContext(msgContext);
}
catch( AxisFault fault ) {
category.error( fault );
1.10 +9 -0 xml-axis/java/src/org/apache/axis/client/Transport.java
Index: Transport.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/Transport.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- Transport.java 2001/08/31 18:40:14 1.9
+++ Transport.java 2001/09/16 19:58:45 1.10
@@ -118,6 +118,15 @@
}
/**
+ * Allow the transport to grab any transport-specific stuff it might
+ * want from a returned MessageContext
+ */
+ public void processReturnedMessageContext(MessageContext context)
+ {
+ // Default impl does nothing
+ }
+
+ /**
* Sets the transport chain name - to override the default.
* @param name the name of the transport chain to use
*/
1.19 +8 -4 xml-axis/java/src/org/apache/axis/providers/java/RPCProvider.java
Index: RPCProvider.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/providers/java/RPCProvider.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- RPCProvider.java 2001/09/06 20:18:09 1.18
+++ RPCProvider.java 2001/09/16 19:58:46 1.19
@@ -63,6 +63,7 @@
import org.apache.axis.message.* ;
import org.apache.axis.server.ParamList;
import org.apache.log4j.Category;
+import org.apache.log4j.Priority;
/**
* Implement message processing by walking over RPCElements of the
@@ -85,8 +86,11 @@
Object obj)
throws Exception
{
+ category.debug("Enter::RPCProvider.processMessage()");
Vector bodies = reqEnv.getBodyElements();
-
+ category.debug("There are " + bodies.size() + " body elements.");
+ category.debug("body is " + bodies.get(0));
+
/* Loop over each entry in the SOAPBody - each one is a different */
/* RPC call. */
/******************************************************************/
@@ -106,9 +110,7 @@
for ( int i = 0 ; i < args.size() ; i++ ) {
argValues[i] = ((RPCParam)args.get(i)).getValue() ;
- if (DEBUG_LOG) {
- System.out.println(" value: " + argValues[i] );
- }
+ category.debug(" value: " + argValues[i] );
}
}
@@ -218,6 +220,8 @@
objRes = method.invoke( obj, argValues );
}
}
+
+ category.debug("Got result: " + objRes);
/* Now put the result in the result SOAPEnvelope */
/*************************************************/
1.4 +0 -1 xml-axis/java/src/org/apache/axis/security/simple/SimpleSecurityProvider.java
Index: SimpleSecurityProvider.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/security/simple/SimpleSecurityProvider.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- SimpleSecurityProvider.java 2001/09/12 18:15:23 1.3
+++ SimpleSecurityProvider.java 2001/09/16 19:58:46 1.4
@@ -81,7 +81,6 @@
// load the users list
static {
- category.setPriority(Priority.DEBUG);
File userFile = new File("users.lst");
if (userFile.exists()) {
users = new HashMap();
1.47 +45 -2 xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java
Index: AxisServlet.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/AxisServlet.java,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- AxisServlet.java 2001/09/12 18:54:55 1.46
+++ AxisServlet.java 2001/09/16 19:58:46 1.47
@@ -73,8 +73,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
-import java.io.IOException;
-import java.io.InputStream;
+import java.io.*;
import java.util.Enumeration;
/**
@@ -175,6 +174,50 @@
XMLUtils.DocumentToWriter(doc, res.getWriter());
res.getWriter().close();
}
+ } else if (req.getParameterNames().hasMoreElements()) {
+ Enumeration enum = req.getParameterNames();
+ PrintWriter writer = res.getWriter();
+ String method = null;
+ String args = "";
+ while (enum.hasMoreElements()) {
+ String param = (String) enum.nextElement();
+ if (param.equalsIgnoreCase("method")) {
+ method = req.getParameter(param);
+ } else {
+ args += "<" + param + ">" +
+ req.getParameter(param) +
+ "</" + param + ">";
+ }
+ }
+ if (method == null) {
+ writer.println("<p>No method!</p>");
+ writer.close();
+ return;
+ }
+ String body = "<" + method + ">" + args +
+ "</" + method + ">";
+ String msgtxt = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\">" +
+ "<SOAP-ENV:Body>" + body + "</SOAP-ENV:Body>" +
+ "</SOAP-ENV:Envelope>";
+ ByteArrayInputStream istream = new ByteArrayInputStream(
+ msgtxt.getBytes());
+ Message msg = new Message(istream, false);
+ msgContext.setRequestMessage(msg);
+// if (msg != null) {
+// writer.println(msg.getAsString());
+// return;
+// }
+ engine.invoke(msgContext);
+ Message respMsg = msgContext.getResponseMessage();
+ if (respMsg != null) {
+ writer.println("<p>Got response message:</p>");
+ writer.println(respMsg.getAsString());
+ writer.close();
+ } else {
+ writer.println("<p>No response message!</p>");
+ writer.close();
+ }
+ return;
} else {
res.setContentType("text/html");
res.getWriter().println("<h1>" + req.getRequestURI() +
1.7 +15 -2 xml-axis/java/src/org/apache/axis/transport/http/HTTPTransport.java
Index: HTTPTransport.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/http/HTTPTransport.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- HTTPTransport.java 2001/09/05 17:23:00 1.6
+++ HTTPTransport.java 2001/09/16 19:58:46 1.7
@@ -81,7 +81,9 @@
*/
static public String URL = MessageContext.TRANS_URL;
static public String ACTION = HTTPConstants.MC_HTTP_SOAPACTION;
-
+
+ private String cookie;
+ private String cookie2;
private String action;
public HTTPTransport () {
@@ -111,12 +113,23 @@
throws AxisFault
{
if (action != null) mc.setProperty(ACTION, action);
-
+
+ // Set up any cookies we know about
+ if (cookie != null)
+ mc.setProperty(HTTPConstants.HEADER_COOKIE, cookie);
+ if (cookie2 != null)
+ mc.setProperty(HTTPConstants.HEADER_COOKIE, cookie2);
+
// Allow the SOAPAction to determine the service, if the service
// (a) has not already been determined, and (b) if a service matching
// the soap action has been deployed.
if (mc.getServiceHandler() == null) {
mc.setTargetService( (String)mc.getProperty(ACTION) );
}
+ }
+
+ public void processReturnedMessageContext(MessageContext context) {
+ cookie = context.getStrProp(HTTPConstants.HEADER_COOKIE);
+ cookie2 = context.getStrProp(HTTPConstants.HEADER_COOKIE2);
}
}
1.12 +0 -7 xml-axis/java/src/org/apache/axis/transport/local/LocalSender.java
Index: LocalSender.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/transport/local/LocalSender.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- LocalSender.java 2001/09/10 19:56:29 1.11
+++ LocalSender.java 2001/09/16 19:58:46 1.12
@@ -114,13 +114,6 @@
serverContext.setRequestMessage(new Message(msgStr));
serverContext.setTransportName("local");
- // copy soap action if it is present
- String action = clientContext.getStrProp(HTTPConstants.MC_HTTP_SOAPACTION);
- if (action != null) {
- serverContext.setProperty(HTTPConstants.MC_HTTP_SOAPACTION, action);
- serverContext.setTransportName("http");
- }
-
// Also copy authentication info if present
String user = clientContext.getStrProp(MessageContext.USERID);
if (user != null) {
1.9 +10 -7 xml-axis/java/test/build_functional_tests.xml
Index: build_functional_tests.xml
===================================================================
RCS file: /home/cvs/xml-axis/java/test/build_functional_tests.xml,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- build_functional_tests.xml 2001/07/10 22:53:15 1.8
+++ build_functional_tests.xml 2001/09/16 19:58:46 1.9
@@ -11,7 +11,7 @@
Prerequisites:
a successful Axis build configuration
-
+
Author:
Rob Jellinghaus <ro...@unrealities.com>
@@ -54,17 +54,20 @@
<classpath refid="test-classpath" />
</java>
</target>
-
+
<!-- =================================================================== -->
<!-- Runs the JUnit functional test -->
<!-- =================================================================== -->
<target name="junit-functional" if="junit.present">
-
+
<!-- first, put the JWS where the functional test can see it -->
<mkdir dir="build/jws" />
<copy file="samples/stock/StockQuoteService.jws" todir="build/jws" />
<copy file="test/functional/AltStockQuoteService.jws" todir="build/jws" />
-
+
+ <!--...not to mention the sample user list -->
+ <copy file="samples/stock/users.lst" todir="build"/>
+
<!-- now, run the actual test -->
<junit dir="." printsummary="yes" haltonfailure="yes" fork="yes">
<classpath refid="test-classpath" />
@@ -78,7 +81,7 @@
</batchtest>
</junit>
</target>
-
+
<!-- =================================================================== -->
<!-- Stops the functional test HTTP server -->
<!-- =================================================================== -->
@@ -89,7 +92,7 @@
<arg line="quit"/>
</java>
</target>
-
+
<!-- =================================================================== -->
<!-- Run functional tests -->
<!-- =================================================================== -->
@@ -103,7 +106,7 @@
testTarget="junit-functional"
stopTarget="stop-functional-test-http-server" />
</target>
-
+
<!-- =================================================================== -->
<!-- Runs the JUnit functional test, with special class parameter. -->
<!-- This is because RobJ's IDE can't build into multiple directories; -->