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 du...@apache.org on 2001/03/15 02:53:34 UTC
cvs commit: xml-axis/java/src/org/apache/axis/message RPCArg.java SOAPBody.java SOAPEnvelope.java
dug 01/03/14 17:53:34
Modified: java/src/org/apache/axis/client HTTPCall.java
HTTPMessage.java
java/src/org/apache/axis/handlers JWSProcessor.java
MsgDispatchHandler.java RPCDispatchHandler.java
SOAPServerHandler.java
java/src/org/apache/axis/message RPCArg.java SOAPBody.java
SOAPEnvelope.java
Log:
Add support for encoding style on the soap env.
make jws processor call javac thru java not thru cmd line
Revision Changes Path
1.15 +19 -4 xml-axis/java/src/org/apache/axis/client/HTTPCall.java
Index: HTTPCall.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/HTTPCall.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- HTTPCall.java 2001/03/13 06:46:18 1.14
+++ HTTPCall.java 2001/03/15 01:53:32 1.15
@@ -82,6 +82,7 @@
private String action ;
private String userID ;
private String passwd ;
+ private String encodingStyleURI ;
// For testing
public boolean doLocal = false ;
@@ -122,6 +123,14 @@
return( passwd );
}
+ public void setEncodingStyleURI( String uri ) {
+ encodingStyleURI = uri ;
+ }
+
+ public String getEncodingStyleURI() {
+ return( encodingStyleURI );
+ }
+
public static Object invoke(String url, String act, String m, Object[] args)
throws AxisFault
{
@@ -132,9 +141,13 @@
}
public Object invoke( String method, Object[] args ) throws AxisFault {
+ RPCBody body = new RPCBody( method, args );
+ return( invoke( body ) );
+ }
+
+ public Object invoke( RPCBody body ) throws AxisFault {
// quote = HTTPCall.invoke( "getQuote", Object[] { "IBM" } );
Debug.Print( 1, "Enter: HTTPCall.invoke" );
- RPCBody body = new RPCBody( method, args );
SOAPEnvelope reqEnv = new SOAPEnvelope();
SOAPEnvelope resEnv = null ;
HTTPMessage hMsg = new HTTPMessage( url, action );
@@ -148,12 +161,14 @@
hMsg.setUserID( userID );
hMsg.setPassword( passwd );
+ if ( encodingStyleURI != null )
+ reqEnv.setEncodingStyleURI( encodingStyleURI );
// for testing - skip HTTP layer
hMsg.doLocal = this.doLocal ;
- body.setPrefix( "m" );
- body.setNamespaceURI( action );
+ if ( body.getPrefix() == null ) body.setPrefix( "m" );
+ if ( body.getNamespaceURI() == null ) body.setNamespaceURI( action );
reqEnv.addBody( body.getAsSOAPBody() );
try {
@@ -169,7 +184,7 @@
Document doc = (Document) resMsg.getAs("Document");
body = new RPCBody( doc.getRootElement() );
resArgs = body.getArgs();
- if ( args != null && resArgs.size() > 0 )
+ if ( resArgs != null && resArgs.size() > 0 )
result = (String) ((RPCArg) resArgs.get(0)).getValue() ;
Debug.Print( 1, "Exit: HTTPCall.invoke" );
return( result );
1.19 +16 -5 xml-axis/java/src/org/apache/axis/client/HTTPMessage.java
Index: HTTPMessage.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/client/HTTPMessage.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- HTTPMessage.java 2001/03/08 13:44:04 1.18
+++ HTTPMessage.java 2001/03/15 01:53:32 1.19
@@ -80,10 +80,11 @@
// Only supports String
public class HTTPMessage {
- private String url = null ;
- private String action = null ;
- private String userID = null ;
- private String passwd = null ;
+ private String url = null ;
+ private String action = null ;
+ private String userID = null ;
+ private String passwd = null ;
+ private String encodingStyleURI = null ;
// For testing
public boolean doLocal = false ;
@@ -124,6 +125,14 @@
return( passwd );
}
+ public void setEncodingStyleURI( String uri ) {
+ encodingStyleURI = uri ;
+ }
+
+ public String getEncodingStyleURI() {
+ return( encodingStyleURI );
+ }
+
public static void invoke(String url, String act, MessageContext mc )
throws AxisFault
{
@@ -143,6 +152,8 @@
reqEnv = (SOAPEnvelope) inMsg.getAs("SOAPEnvelope");
else {
reqEnv = new SOAPEnvelope();
+ if ( encodingStyleURI != null )
+ reqEnv.setEncodingStyleURI( encodingStyleURI );
SOAPBody body = new SOAPBody( (Document) inMsg.getAs("Document") );
reqEnv.addBody( body );
}
@@ -187,7 +198,7 @@
msgContext.setProperty(MessageContext.TRANS_OUTPUT, "HTTP.output" );
}
- if ( true ) { // Debug.getDebugLevel() > 0 ) {
+ if ( false ) { // Debug.getDebugLevel() > 0 ) {
SOAPHeader header = new SOAPHeader();
header.setPrefix("d");
header.setName("Debug");
1.3 +36 -15 xml-axis/java/src/org/apache/axis/handlers/JWSProcessor.java
Index: JWSProcessor.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/JWSProcessor.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- JWSProcessor.java 2001/02/20 22:51:29 1.2
+++ JWSProcessor.java 2001/03/15 01:53:32 1.3
@@ -1,7 +1,7 @@
/*
* The Apache Software License, Version 1.1
*
- * Copyright (c) 2001 The Apache Software Foundation. All rights
+ * Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -9,7 +9,7 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
@@ -17,7 +17,7 @@
* distribution.
*
* 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
+ * if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
@@ -25,7 +25,7 @@
*
* 4. The names "Axis" and "Apache Software Foundation" must
* not be used to endorse or promote products derived from this
- * software without prior written permission. For written
+ * software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
@@ -59,8 +59,10 @@
import org.apache.axis.* ;
import org.apache.axis.utils.Debug ;
import org.apache.axis.utils.AxisClassLoader ;
+import sun.tools.javac.Main;
+import org.jdom.* ;
-/**
+/**
* This handler will use the JWSFileName property of the MsgContext to
* locate a *.jws (JavaWebService) file. If found it will copy it to a
* *.java file, compile it and then run it using the RPCDispatchHandler.
@@ -68,11 +70,13 @@
* Todo:
* support msg instead of just rpc
* allow configurable handler (not just RPCDispatchHandler)
- *
+ *
* @author Doug Davis (dug@us.ibm.com)
*/
public class JWSProcessor extends BasicHandler
{
+ static String errFile = "jws.err" ;
+
public void invoke(MessageContext msgContext) throws AxisFault
{
Debug.Print( 1, "Enter: JWSProcessor::invoke" );
@@ -87,10 +91,10 @@
String cFile = jwsFile.substring(0, jwsFile.length()-3) + "class" ;
Debug.Print( 2, "jFile: " + jFile );
Debug.Print( 2, "cFile: " + cFile );
-
+
File f1 = new File( cFile );
File f2 = new File( jwsFile );
-
+
/* Check to see if we need to recompile */
/****************************************/
if ( !f1.exists() || f2.lastModified() > f1.lastModified() ) {
@@ -111,24 +115,41 @@
/* Now run javac on the *.java file */
/************************************/
Debug.Print(2, "javac " + jFile );
- Process proc = rt.exec( "javac " + jFile );
- proc.waitFor();
+ // Process proc = rt.exec( "javac " + jFile );
+ // proc.waitFor();
+ FileOutputStream out = new FileOutputStream( errFile );
+ Main compiler = new Main( out, "javac" );
+ String outdir = f1.getParent();
+ String[] args = new String[] { "-d", outdir, jFile };
+ boolean result = compiler.compile( args );
/* Delete the temporary *.java file and check the return code */
/**************************************************************/
(new File(jFile)).delete();
- if ( proc.exitValue() != 0 ) {
+ // if ( proc.exitValue() != 0 ) {
+ if ( !result ) {
/* Delete the *class file - sometimes it gets created even */
/* when there are errors - so erase it so it doesn't */
/* confuse us. */
/***********************************************************/
(new File(cFile)).delete();
+ Element root = new Element( "Errors" );
+ StringBuffer sbuf = new StringBuffer();
+ FileReader inp = new FileReader( errFile );
+
+ buf = new char[4096];
+
+ while ( (rc = inp.read(buf, 0, 4096)) > 0 )
+ sbuf.append( buf, 0, rc );
+ inp.close();
+ root.addContent( sbuf.toString() );
+ (new File(errFile)).delete();
throw new AxisFault( "Server.compileError",
- "Error while compiling: " + jFile +
- " rc=" + proc.exitValue(),
- null, null );
+ "Error while compiling: " + jFile,
+ null, new Element[] { root } );
}
+ (new File(errFile)).delete();
}
/* Load the class */
@@ -142,7 +163,7 @@
/* Create a new RPCDispatchHandler - this will be the "service" */
/* that we invoke. */
/******************************************************************/
- RPCDispatchHandler rpc = new RPCDispatchHandler();
+ Handler rpc = new RPCDispatchHandler();
msgContext.setProperty( MessageContext.SVC_HANDLER, rpc );
rpc.addOption( "className", clsName );
1.11 +13 -2 xml-axis/java/src/org/apache/axis/handlers/MsgDispatchHandler.java
Index: MsgDispatchHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/MsgDispatchHandler.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- MsgDispatchHandler.java 2001/03/09 19:25:25 1.10
+++ MsgDispatchHandler.java 2001/03/15 01:53:32 1.11
@@ -105,6 +105,15 @@
(SOAPEnvelope)resMsg.getAs("SOAPEnvelope");
Document doc = new Document( reqBody.getAsXML() );
+
+ /* If no methodName was specified during deployment then get it */
+ /* from the root of the Body element */
+ /* Hmmm, should we do this???? */
+ /****************************************************************/
+ if ( methodName == null || methodName.equals("") ) {
+ Element root = doc.getRootElement();
+ if ( root != null ) methodName = root.getName();
+ }
argClasses[0] = cl.loadClass("org.apache.axis.MessageContext");
argClasses[1] = cl.loadClass("org.jdom.Document");
@@ -115,8 +124,10 @@
Document retDoc = (Document) method.invoke( obj, argObjects );
- SOAPBody resBody = new SOAPBody( retDoc );
- resEnv.addBody(resBody);
+ if ( retDoc != null ) {
+ SOAPBody resBody = new SOAPBody( retDoc );
+ resEnv.addBody(resBody);
+ }
if (resMsg == null) {
resMsg = new Message(resEnv, "SOAPEnvelope");
1.21 +1 -1 xml-axis/java/src/org/apache/axis/handlers/RPCDispatchHandler.java
Index: RPCDispatchHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/RPCDispatchHandler.java,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -r1.20 -r1.21
--- RPCDispatchHandler.java 2001/03/13 06:46:19 1.20
+++ RPCDispatchHandler.java 2001/03/15 01:53:33 1.21
@@ -111,11 +111,11 @@
"Service name=" + methodName,
null, null ); // Should they??
- Debug.Print( 2, "There are " + args.size() + " arg(s)" );
Class[] argClasses = null ;
Object[] argValues = null ;
if ( args != null && args.size() > 0 ) {
+ Debug.Print( 2, "There are " + args.size() + " arg(s)" );
argClasses = new Class[ args.size() ];
argValues = new Object[ args.size()];
for ( i = 0 ; i < args.size() ; i++ ) {
1.2 +12 -3 xml-axis/java/src/org/apache/axis/handlers/SOAPServerHandler.java
Index: SOAPServerHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/SOAPServerHandler.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SOAPServerHandler.java 2001/03/08 01:15:19 1.1
+++ SOAPServerHandler.java 2001/03/15 01:53:33 1.2
@@ -100,6 +100,7 @@
msgContext.setProperty( MessageContext.SVC_HANDLER, service );
if ( service instanceof SimpleTargetedChain ) {
+ Debug.Print( 2, "Invoking input chain" );
stc = (SimpleTargetedChain) service ;
h = stc.getInputChain() ;
if ( h != null ) h.invoke(msgContext);
@@ -109,12 +110,20 @@
if ( stc != null ) {
h = stc.getPivotHandler();
- if ( h != null ) h.invoke(msgContext);
+ if ( h != null ) {
+ Debug.Print( 2, "Invoking service/pivot" );
+ h.invoke(msgContext);
+ }
h = stc.getOutputChain();
- if ( h != null ) h.invoke(msgContext);
+ if ( h != null ) {
+ Debug.Print( 2, "Invoking output chain" );
+ h.invoke(msgContext);
+ }
}
- else
+ else {
+ Debug.Print( 2, "Invoking service" );
service.invoke(msgContext);
+ }
Debug.Print( 1, "Exit : SOAPServerHandler::invoke" );
}
1.9 +22 -0 xml-axis/java/src/org/apache/axis/message/RPCArg.java
Index: RPCArg.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/RPCArg.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- RPCArg.java 2001/03/02 20:03:54 1.8
+++ RPCArg.java 2001/03/15 01:53:33 1.9
@@ -60,6 +60,9 @@
import java.util.* ;
import org.jdom.* ;
+import org.apache.axis.utils.AxisClassLoader ;
+import org.apache.axis.utils.Debug ;
+
/**
*
* @author Doug Davis (dug@us.ibm.com)
@@ -69,6 +72,7 @@
protected String namespaceURI ;
protected String name ;
protected String value ; // only support String for now
+ protected String type ;
public RPCArg() {}
@@ -100,6 +104,24 @@
public String getValue() { return( value ); }
public void setValue(String val) { value = val ; }
+
+ public String getTypeAsString() {
+ if ( type == null ) type = "java.lang.String" ;
+ return( type );
+ }
+ public Class getTypeAsClass() {
+ if ( type == null ) type = "java.lang.String" ;
+ AxisClassLoader cl = new AxisClassLoader();
+ Class cls = null ;
+ try {
+ cl.loadClass(type);
+ }
+ catch( Exception e ) {
+ Debug.Print(0, e);
+ }
+ return( cls );
+ }
+ public void setType(String str) { type = str ; }
public Element getAsXML() {
Element root ;
1.11 +4 -1 xml-axis/java/src/org/apache/axis/message/SOAPBody.java
Index: SOAPBody.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPBody.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- SOAPBody.java 2001/03/03 01:07:05 1.10
+++ SOAPBody.java 2001/03/15 01:53:33 1.11
@@ -73,7 +73,10 @@
}
public SOAPBody(Document doc) {
- root = doc.getRootElement() ;
+ if ( doc != null )
+ root = doc.getRootElement() ;
+ else
+ root = null ;
}
public SOAPBody(Element elem) {
1.13 +29 -7 xml-axis/java/src/org/apache/axis/message/SOAPEnvelope.java
Index: SOAPEnvelope.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/message/SOAPEnvelope.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- SOAPEnvelope.java 2001/03/03 01:07:05 1.12
+++ SOAPEnvelope.java 2001/03/15 01:53:33 1.13
@@ -69,12 +69,22 @@
*/
public class SOAPEnvelope {
protected String prefix ;
+ protected String namespaceURI ;
+ protected String encodingStyleURI ;
protected Vector headers ;
protected Vector body ; // Vector of SOAPBody's
public SOAPEnvelope() {
}
+ public void setEncodingStyleURI( String uri ) {
+ encodingStyleURI = uri ;
+ }
+
+ public String getEncodingStyleURI() {
+ return( encodingStyleURI );
+ }
+
public SOAPEnvelope(Document doc) {
setEnvelope( doc.getRootElement() );
}
@@ -95,6 +105,10 @@
return ;
}
+ prefix = elem.getNamespacePrefix();
+ namespaceURI = elem.getNamespace().getURI();
+ encodingStyleURI = elem.getAttributeValue( Constants.ATTR_ENCODING_STYLE );
+
e = elem.getChild( Constants.ELEM_HEADER, elem.getNamespace() );
if ( e != null ) {
list = e.getChildren();
@@ -145,6 +159,10 @@
headers.add( header );
}
+ public int getNumBodies() {
+ return( body == null ? 0 : body.size() );
+ }
+
/**
* Returns a vector of SOAPBody's - could be more than one
*/
@@ -167,7 +185,6 @@
*/
public Vector getAsRPCBody() {
if ( body == null ) return( null );
- SOAPBody b = (SOAPBody) body.get(0);
for ( int i = 0 ; i < body.size() ; i++ )
if ( !(body.get(i) instanceof RPCBody) )
body.set(i, new RPCBody( (SOAPBody) body.get(i) ) );
@@ -179,14 +196,20 @@
Element root ;
int i ;
- root = new Element( Constants.ELEM_ENVELOPE, Constants.NSPREFIX_SOAP_ENV,
- Constants.URI_SOAP_ENV );
+ String tmpEnvPre = (prefix != null ? prefix : Constants.NSPREFIX_SOAP_ENV);
+ String tmpEnvURI = (namespaceURI != null ? namespaceURI :
+ Constants.URI_SOAP_ENV);
+ String tmpEnc = (encodingStyleURI != null ? encodingStyleURI :
+ Constants.URI_SOAP_ENC );
+
+ root = new Element( Constants.ELEM_ENVELOPE, tmpEnvPre, tmpEnvURI );
+ root.addAttribute( new Attribute( Constants.ATTR_ENCODING_STYLE,
+ tmpEnvPre, tmpEnvURI, tmpEnc ) );
doc = new Document( root );
if ( headers != null && headers.size() > 0 ) {
Element elem = new Element( Constants.ELEM_HEADER,
- Constants.NSPREFIX_SOAP_ENV,
- Constants.URI_SOAP_ENV );
+ tmpEnvPre, tmpEnvURI );
root.addContent( elem );
for ( i = 0 ; i < headers.size() ; i++ ) {
SOAPHeader h = (SOAPHeader) headers.get(i);
@@ -195,8 +218,7 @@
}
if ( body != null ) {
Element elem = new Element( Constants.ELEM_BODY,
- Constants.NSPREFIX_SOAP_ENV,
- Constants.URI_SOAP_ENV );
+ tmpEnvPre, tmpEnvURI );
root.addContent( elem );
for ( i = 0 ; i < body.size() ; i++ ) {
Element bod = ((SOAPBody)body.get(i)).getAsXML();