gdaniels 2002/10/07 18:31:21
Modified: java Tag: interop4 README axis.properties
java/docs Tag: interop4 axis-bibliography.bib
integration-guide.html reading.html reference.html
user-guide.html
java/src/org/apache/axis Tag: interop4 FaultableHandler.java
java/src/org/apache/axis/handlers Tag: interop4
BasicHandler.java
java/src/org/apache/axis/handlers/soap Tag: interop4
SOAPService.java
java/src/org/apache/axis/transport/http Tag: interop4
SimpleAxisServer.java
java/src/org/apache/axis/utils Tag: interop4 JavaUtils.java
java/src/org/apache/axis/wsdl/symbolTable Tag: interop4
BindingEntry.java Parameter.java SymbolTable.java
java/xmls Tag: interop4 properties.xml
Added: java/docs Tag: interop4 AxisJMSSample.pdf
java/samples/jms Tag: interop4 AxisJMSSample.pdf
Log:
Update interop4 to the current HEAD changes. Everything but the
terra testcase passes with this version, so this is just about ready to
merge back to the HEAD.
Revision Changes Path
No revision
No revision
1.13.2.1 +1 -1 xml-axis/java/README
Index: README
===================================================================
RCS file: /home/cvs/xml-axis/java/README,v
retrieving revision 1.13
retrieving revision 1.13.2.1
diff -u -r1.13 -r1.13.2.1
--- README 25 Sep 2002 19:01:45 -0000 1.13
+++ README 8 Oct 2002 01:31:19 -0000 1.13.2.1
@@ -1,6 +1,6 @@
Axis (Apache eXtensible Interaction System)
-------------------------------------------
- 1.0rc2 Release Sept 25, 2002
+ 1.0 Release Oct 7, 2002
Welcome to Axis! You'll find documentation in the docs/ directory.
1.10.2.1 +1 -1 xml-axis/java/axis.properties
Index: axis.properties
===================================================================
RCS file: /home/cvs/xml-axis/java/axis.properties,v
retrieving revision 1.10
retrieving revision 1.10.2.1
diff -u -r1.10 -r1.10.2.1
--- axis.properties 25 Sep 2002 19:01:45 -0000 1.10
+++ axis.properties 8 Oct 2002 01:31:19 -0000 1.10.2.1
@@ -1,4 +1,4 @@
-axis.version=1.0rc2
+axis.version=1.0
name=axis
Name=Axis
No revision
No revision
1.3.2.1 +4 -4 xml-axis/java/docs/axis-bibliography.bib
Index: axis-bibliography.bib
===================================================================
RCS file: /home/cvs/xml-axis/java/docs/axis-bibliography.bib,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- axis-bibliography.bib 3 Sep 2002 20:30:51 -0000 1.3
+++ axis-bibliography.bib 8 Oct 2002 01:31:19 -0000 1.3.2.1
@@ -30,8 +30,8 @@
title="To infinity and beyond - the quest for {SOAP} interoperability",
author="Sam Ruby",
year=2002,
-
url="http://radio.weblogs.com/0101679/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html",
-
note="\href{http://radio.weblogs.com/0101679/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html}{http://radio.weblogs.com/0101679/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html}"
+
url="http://www.intertwingly.net/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html",
+
note="\href{http://www.intertwingly.net/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html}{http://www.intertwingly.net/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html}"
}
@misc{ruby:gump,
@@ -45,14 +45,14 @@
title="A Busy Developer's Guide to {WSDL 1.1}",
author="Sam Ruby",
year=2002,
-
url="http://radio.weblogs.com/0101679/stories/2002/02/15/aBusyDevelopersGuideToWsdl11.html"
+
url="http://www.intertwingly.net/stories/2002/02/15/aBusyDevelopersGuideToWsdl11.html"
}
@misc{ruby:soap-intro,
title="A Gentle Introduction to {SOAP}",
author="Sam Ruby",
year=2002,
-
url="http://radio.weblogs.com/0101679/stories/2002/03/16/aGentleIntroductionToSoap.html"
+
url="http://www.intertwingly.net/stories/2002/03/16/aGentleIntroductionToSoap.html"
}
1.12.2.1 +174 -83 xml-axis/java/docs/integration-guide.html
Index: integration-guide.html
===================================================================
RCS file: /home/cvs/xml-axis/java/docs/integration-guide.html,v
retrieving revision 1.12
retrieving revision 1.12.2.1
diff -u -r1.12 -r1.12.2.1
--- integration-guide.html 29 Sep 2002 04:28:14 -0000 1.12
+++ integration-guide.html 8 Oct 2002 01:31:19 -0000 1.12.2.1
@@ -29,14 +29,15 @@
Table of Contents</h3>
<a href="#Introduction">Introduction</a>
<br><a href="#Pluggable APIs">Pluggable APIs</a>
-<br> <a href="#System Management Plug">System Management</a>
+<br> <a href="#Components">Components</a>
+<!-- <br> <a href="#System Management Plug">System Management</a>
+-->
<br> <a href="#Logging/Tracing Plug">Logging/Tracing</a>
<br> <a href="#Configuration Plug">Configuration</a>
<br> <a href="#Handlers Plug">Handlers</a>
<br> <a href="#Internationalization Plug">Internationalization</a>
<br> <a href="#Performance Monitoring Plug">Performance Monitoring</a>
<br> <a href="#Encoding Plug">Encoding</a>
-<br> <a href="#Compiler">Compiler</a>
<br> <a href="#WSDL plug">WSDL Parser and Code Generator Framework</a>
<h2>
<a NAME="Introduction"></a>Introduction</h2>
@@ -52,6 +53,156 @@
<a NAME="Pluggable APIs"></a>Pluggable APIs</h2>
The following are the points that are pluggable in order to integrate AXIS
into a web application server.
+The first subsection details a number of pluggable components in general.
+More details are provided for other components in the remaining
+subsections.
+
+<h3>
+<a NAME="Components"></a>Components</h3>
+This section describes in general how to plug specializations
+of various components into AXIS.
+
+<h4>
+General Strategy
+</h4>
+To override the default behavior for a pluggable component:
+<ul>
+<li>Develop implementation of components interface</li>
+<br>
+<li>Define the implementation class to AXIS by either creating
+a service definition file (prefered)
+or by setting a system property.
+<ul>
+<br>
+<li><strong>PREFERED:</strong> To create a service definition file:</li>
+<ul>
+<li>The name of the service definition file is derived from the interface
+or abstract class which the service implements/extends:
+<br>
+<code>/META-INF/services/<componentPackage>.<interfaceName></code>.</li>
+<li>Put the fully qualified class name of the implementation class on a line by
itself
+in the service definition file.</li>
+</ul>
+<br>
+<li>Set system property:
+<ul>
+<li>The name of the system property is the name of the interface.</li>
+<li>The value of the system property is the name of the implementation.</li>
+<li>The optional system property name (in table, below) may be also be used.</li>
+<br>
+<li>Setting a system property is not prefered, particularly in a J2EE or other
application
+hosting environment, because it imposes a directive across all applications.
+This may or may not be appropriate behavior.
+If it is to be done, it should never be done from within a Web Application at
runtime.
+</li>
+</ul>
+</li>
+</ul>
+<br>
+<li>Package the implementation class and, if used,
+the service definition file in a JAR file
+and/or place it where it can be picked up by a class loader (CLASSPATH).</li>
+</ul>
+
+<h4>
+Example 1
+</h4>
+To override the default behavior for the Java Compiler:
+<ul>
+<li>An implementation of the <code>Compiler</code> interface is already provided
for the <code>Jikes</code> compiler.</li>
+<br>
+<li>Create the service definition file named:
+<br>
+<code>/META-INF/services/org.apache.axis.components.compiler.Compiler</code></li>
+<br>
+<li>Add the following line to the service definition file:
+<br>
+<code>org.apache.axis.components.compiler.Jikes</code></li>
+<br>
+<li>Since <code>org.apache.axis.components.compiler.Jikes</code>
+is packaged with AXIS, all that needs to be done is to ensure
+that the service definition file is loadable by a class loader.
+</li>
+</ul>
+
+<h4>
+Example 2
+</h4>
+To override the default behavior for the SocketFactory
+in an environment that does not allow resources to be
+located/loaded appropriately, or where the behavior
+needs to be forced to a specific implementation:
+<ul>
+<li>Provide an implementation of the <code>SocketFactory</code> interface,
+for example <code>your.package.YourSocketFactory</code></li>
+<br>
+<li>Set the system property named
+<br>
+<code>org.apache.axis.components.net.SocketFactory</code>
+<br>
+to the value
+<br>
+<code>your.package.YourSocketFactory</code>
+<br>
+<p>This can be done by using the JVM commandline
+<br>
+<code>-Dorg.apache.axis.components.net.SocketFactory=your.package.YourSocketFactory</code>
+<br>
+</li>
+<li>Ensure that the implementation class is loadable by a class loader.
+</li>
+</ul>
+
+<h4>
+Reference
+</h4>
+
+<table border="1">
+<tr>
+<th>Component/Package</th>
+<th>Factory</th>
+<th>Interface</th>
+<th>Optional System Property</th>
+<th>Default Implementation</th>
+</tr>
+<tr>
+<td><code>org.apache.axis.components.compiler</code></td>
+<td><code>CompilerFactory.getCompiler()</code></td>
+<td><code>Compiler</code></td>
+<td><code>axis.Compiler</code></td>
+<td><code>Javac</code></td>
+</tr>
+<tr>
+<td><code>org.apache.axis.components.image</code></td>
+<td><code>ImageIOFactory.getImageIO()</code></td>
+<td><code>ImageIO</code></td>
+<td><code>axis.ImageIO</code></td>
+<td><code>MerlinIO, JimiIO, JDK13IO</code></td>
+</tr>
+<tr>
+<td><code>org.apache.axis.components.jms</code></td>
+<td><code>JMSVendorAdapterFactory.getJMSVendorAdapter()</code></td>
+<td><code>JMSVendorAdapter</code></td>
+<td><code></code></td>
+<td><code>JNDIVendorAdapter</code></td>
+</tr>
+<tr>
+<td><code>org.apache.axis.components.net</code></td>
+<td><code>SocketFactoryFactory.getFactory()</code></td>
+<td><code>SocketFactory</code></td>
+<td><code>axis.socketFactory</code></td>
+<td><code>DefaultSocketFactory</code></td>
+</tr>
+<tr>
+<td><code>org.apache.axis.components.net</code></td>
+<td><code>SocketFactoryFactory.getSecureFactory()</code></td>
+<td><code>SocketFactory</code></td>
+<td><code>axis.socketSecureFactory</code></td>
+<td><code>JSSESocketFactory</code></td>
+</tr>
+</table>
+
+<!--
<h3>
<a NAME="System Management Plug"></a>System Management</h3>
What points are necessary to manage AXIS?
@@ -87,6 +238,7 @@
<li>
Example</li>
</ul>
+-->
<h3><a NAME="Logging/Tracing Plug"></a>Logging/Tracing</h3>
AXIS logging and tracing is based on the Logging component of the
@@ -224,7 +376,7 @@
which currently provides methods that return client and server
configurations.
-<p>Our focus will be how to define the implemenation class for
+<p>Our focus will be how to define the implementation class for
<code>EngineConfigurationFactory</code>.
<ul>
@@ -251,7 +403,7 @@
<code>AxisClient = new AxisClient(config);</code>
</ul>
<br>The details may vary (server versus client, whether other factories are
involved, etc).
-Regardless, the point is that user code is responsible for
+Regardless, the point is that integration code is responsible for
calling <code>EngineConfigurationFactoryFinder(someContext)</code>
and ensuring that the results are handed to AXIS.
<code>someContext</code> is key to how the factory finder
@@ -274,8 +426,8 @@
</li>
<li>Locate all resources named
<code>META-INF/services/org.apache.axis.EngineConfigurationFactory</code>.
-Each line of such a file identifies the name of a class
-implementing the interface.
+Each line of such a resource identifies the name of a class
+implementing the interface ('#' comments, through end-of-line).
</li>
<li>
<code>org.apache.axis.configuration.EngineConfigurationFactoryServlet</code>
@@ -301,7 +453,7 @@
<li>
The implementation class is required to examine runtime environment
(to optionally include the parameter).
-If the environment can provide informatin required by
+If the environment can provide information required by
an EngineConfigurationFactory,
then the <code>newFactory()</code> may return in instance of that factory.
Otherwise, <code>newFactory()</code> must return null.
@@ -332,13 +484,15 @@
from the current working directory!).
<p>The default Servlet factory will open the Web Application resource
-<code>/WEB-INF/server-config.wsdd</code>:
+<code>/WEB-INF/server-config.wsdd</code>
+(The name of this file may be changed using the
+system property <code>axis.ServerConfigFile</code>):
<ul>
<li>
-If it exists as a accessible file (i.e. not in a JAR/WAR file),
-then it opens it as a file
-(this allows changes to be saved,
-if changes are allowed & made using the Admin tools).
+If it exists as an accessible file (i.e. not in a JAR/WAR file),
+then it opens it as a file.
+This allows changes to be saved,
+if changes are allowed & made using the Admin tools.
</li>
<li>
If it does not exist as a file, then an attempt is made
@@ -380,39 +534,8 @@
<h3>
<a NAME="Handlers Plug"></a>Handlers</h3>
-What new handlers might a system integrator wish to implement?
-<ul>
-<li>
-Justification/Rationale - why is this plug point necessary? Spec
-compliance?</li>
-
-<li>
-Interfaces</li>
-
-<li>
-Mechanism</li>
-
-<ul>
-<li>
-Life cycle</li>
-
-<li>
-Exception handling - in general; plug-in shouldn't throw any exceptions
-- does runtime ignore? Log?)</li>
-
-<li>
-Multiple thread support? Ie., is synchronization required?</li>
-</ul>
-
-<li>
-Configuration/reconfiguration</li>
-
-<li>
-Default behavior if not plugged.</li>
-
-<li>
-Example</li>
-</ul>
+See the <a href="architecture-guide.html">Architecture
+Guide</a> for current information on Handlers.
<h3>
<a NAME="Internationalization Plug"></a>Internationalization</h3>
@@ -592,7 +715,8 @@
<h3>
<a NAME="Performance Monitoring Plug"></a>Performance Monitoring</h3>
-How can we monitor the performance of AXIS?
+AXIS does not yet include specific Performance Monitoring Plugs.
+<!--
<ul>
<li>
Justification/Rationale - why is this plug point necessary? Spec
@@ -625,9 +749,12 @@
<li>
Example</li>
</ul>
+-->
<h3>
<a NAME="Encoding Plug"></a>Encoding</h3>
+AXIS does not yet include an Encoding Plug.
+<!--
How can a system integrator plug in other encoding mechanisms such as SOAP
1.2 or optimized XML-based encoding?
<ul>
@@ -662,43 +789,7 @@
<li>
Example</li>
</ul>
-
-<h3>
-<a NAME="Compiler"></a>Compiler</h3>
-How can a system integrator plug in other encoding mechanisms such as SOAP
-1.2 or optimized XML-based encoding?
-<ul>
-<li>
-Justification/Rationale - why is this plug point necessary? Spec
-compliance?</li>
-
-<li>
-Interfaces</li>
-
-<li>
-Mechanism</li>
-
-<ul>
-<li>
-Life cycle</li>
-
-<li>
-Exception handling - in general; plug-in shouldn't throw any exceptions
-- does runtime ignore? Log?)</li>
-
-<li>
-Multiple thread support? Ie., is synchronization required?</li>
-</ul>
-
-<li>
-Configuration/reconfiguration</li>
-
-<li>
-Default behavior if not plugged.</li>
-
-<li>
-Example</li>
-</ul>
+-->
<h3>
<a NAME="WSDL plug"></a>WSDL Parser and Code Generator Framework</h3>
1.3.2.1 +80 -21 xml-axis/java/docs/reading.html
Index: reading.html
===================================================================
RCS file: /home/cvs/xml-axis/java/docs/reading.html,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -u -r1.3 -r1.3.2.1
--- reading.html 3 Sep 2002 20:30:51 -0000 1.3
+++ reading.html 8 Oct 2002 01:31:19 -0000 1.3.2.1
@@ -22,20 +22,21 @@
<img SRC="axis.jpg" height=96 width=176></h1></center>
<h1>Recommended Reading</h1>
-
+<a name="specifications">
<h2>Specifications</h2>
+</a>
<ol>
<li>
<a href="http://www.w3.org/TR/SOAP/">
SOAP Version 1.1
- </a>
+ </a><br>
Remember that SOAP1.1 is not an official W3C standard.
</li>
<li>
<a href="http://www.w3.org/TR/soap12-part0/">
SOAP Version 1.2 Part 0: Primer
- </a>
+ </a><br>
This and the follow-on sections cover what the W3C think SOAP
is and how it should be used.
@@ -43,7 +44,7 @@
<li>
<a href="http://www.w3.org/TR/wsdl">
Web Services Description Language (WSDL) 1.1
- </a>
+ </a><br>
</li>
<li>
<a href="http://ietf.org/rfc/rfc2616.txt">
@@ -53,13 +54,13 @@
<li>
<a href="http://java.sun.com/xml/downloads/jaxrpc.html">
JAX-RPC Specification 1.0
- </a>
+ </a><br>
The public API for Web Services in Java.
</li>
<li>
<a href="http://www.w3.org/TR/xmlschema-0/">
XML Schema Part 0: Primer
- </a>
+ </a><br>
The W3C XML Schema, (WXS) is one of the two sets of datatype SOAP
supports, the other being the SOAP Section 5 datatypes that predate
WXS. Complicated as it is, it is useful to have a vague understanding
@@ -68,42 +69,58 @@
</ol>
+
+<a name="presentations">
<h2>Explanations, articles and presentations</h2>
+</a>
<ol>
<li>
- <a
href="http://radio.weblogs.com/0101679/stories/2002/03/16/aGentleIntroductionToSoap.html">
+ <a
href="http://www.intertwingly.net/stories/2002/03/16/aGentleIntroductionToSoap.html">
A Gentle Introduction to SOAP
</a>
+ Sam Ruby tries not to scare people.
</li>
<li>
- <a
href="http://radio.weblogs.com/0101679/stories/2002/02/15/aBusyDevelopersGuideToWsdl11.html">
+ <a
href="http://www.intertwingly.net/stories/2002/02/15/aBusyDevelopersGuideToWsdl11.html">
A Busy Developer's Guide to WSDL 1.1
- </a>
-</li>
-<li>
- <a
href="http://radio.weblogs.com/0101679/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html">
- To infinity and beyond - the quest for SOAP interoperability
- </a>
+ </a><br>
+ Quick intro to WSDL by the eponymous Sam Ruby.
</li>
+<li>
+ <a href="http://www.ociweb.com/javasig/knowledgebase/2002Sep/">
+ Axis - an open source web service toolkit for Java</a><br>
+ by Mark Volkmann, Partner, Object Computing, Inc. A very good introduction
+ to SOAP and Axis. Highly Recommended.
+
<li>
<a href="http://manning.com/antbook">
- Java develoment with Ant (chapter 15)
- </a>
+ Java development with Ant
+ </a><br>
+ by Hatcher and Loughran.
+ A book on Ant development which covers Web Service development with Axis,
+ along with other topics relevant to Java developers using Ant. The Web Service
+ chapter, chapter 15, is free to download.
+
</li>
<li>
<a href="http://www.iseran.com/Steve/papers/when_web_services_go_bad.html">
When Web Services Go Bad
- </a>
+ </a><br>
+ Steve Loughran tries to scare people.
+ A painful demonstration how deployment and system management are
+ trouble spots in a production service, followed by an espousal of a
+ deployment-centric development process.
+
</li>
<li>
<a href="http://servlet.java.sun.com/javaone/sf2002/conf/sessions/index.en.jsp">
- JavaOne 2002,Web Services Today and Tomorrow </a>
+ JavaOne 2002,Web Services Today and Tomorrow </a><br>
(Java Developer connection login required)
</li>
<li>
<a href="http://java.sun.com/webservices/docs/1.0/tutorial/doc/JAXRPC.html">
- The Java Web Services Tutorial: Java API for XML-based RPC </a>
+ The Java Web Services Tutorial: Java API for XML-based RPC </a><br>
This is part of Sun's guide to their Java Web Services Developer Pack.
The examples are all based on their JWSDP, but as Axis also implements
JAX-RPC, they may all port to Axis.
@@ -113,7 +130,7 @@
<li>
<a href="http://java.sun.com/blueprints/webservices/using/webservbp.html">
- Using Web Services Effectively.</a>
+ Using Web Services Effectively.</a><br>
Blissfully ignoring issues such as versioning, robustness and security and
all the other details a production Web Service needs, instead pushing EJB as
@@ -123,12 +140,46 @@
</li>
+<li>
+ <a href="http://www.pankaj-k.net/axis4tag/">
+ Web Services with JAX-RPC and Apache Axis.</a><br>
+ by Pankaj Kumar.
+ Starting with a 10000 ft. view of Web Services, prior technologies, current and
emerging
+ standards, it quickly gets into the nitty-gritties of using JAX-RPC and Apache
Axis
+ for writing and executing programs. Has a nice coverage of different invocation
styles --
+ generated stubs, dynamic proxy and dynamic invocation interface. A good place
to start
+ if you are new to Web Services and Axis.
+ <br/>
+ <br/>
+ The author also maintains a <a
href="http://www.pankaj-k.net/webservices/index.html">
+ Web Services Resource Page</a>.
+
+</li>
</ol>
+<a name="interop">
+<h2>Interoperability</h2>
+</a>
+<ol>
+<li>
+ <a
href="http://www.intertwingly.net/stories/2002/02/01/toInfinityAndBeyondTheQuestForSoapInteroperability.html">
+ To infinity and beyond - the quest for SOAP interoperability
+ </a><br>
+ Sam Ruby explains why Interop matters so much.
+</li>
+<li>
+ <a href="http://www.iseran.com/Steve/papers/interop/">
+ The Wondrous Curse of Interoperability
+ </a><br>
+ Steve Loughran on interop challenges (especially between .NET and Axis),
+ and how to test for them.
+</li>
+</ol>
+<a name="advanced">
<h2>Advanced topics</h2>
-
+</a>
<ol>
<li>
<a href="http://www.extreme.indiana.edu/xgws/papers/sc00_paper/index.html">
@@ -145,5 +196,13 @@
Investigating the Limits of SOAP Performance for Scientific Computing
</a>
</li>
+<li>
+ <a href="http://www.w3.org/TR/webarch/">
+ Architectural Principles of the World Wide Web
+ </a>
+</li>
+
+
+
</ol>
1.11.2.1 +77 -61 xml-axis/java/docs/reference.html
Index: reference.html
===================================================================
RCS file: /home/cvs/xml-axis/java/docs/reference.html,v
retrieving revision 1.11
retrieving revision 1.11.2.1
diff -u -r1.11 -r1.11.2.1
--- reference.html 27 Sep 2002 02:41:55 -0000 1.11
+++ reference.html 8 Oct 2002 01:31:19 -0000 1.11.2.1
@@ -30,7 +30,6 @@
</ul>
<h2> <a name="Tools"></a>Tools Reference</h2>
<h3><a name="WSDL2Java"></a>WSDL2Java Reference</h3>
-<h4>Other WSDL2Java details</h4>
<p>Usage: java org.apache.axis.wsdl.WSDL2Java [options] WSDL-URI <br>
Options: <br>
-h, --help <br>
@@ -39,6 +38,18 @@
-v, --verbose <br>
print informational messages <br>
+ -n, --noImports <br>
+
+ only generate code for the immediate WSDL document <br>
+ -O, --timeout <argument> <br>
+
+ timeout in seconds (default is 45, specify -1 to disable) <br>
+ -D, --Debug <br>
+
+ print debug information <br>
+ -W, --noWrapped<br>
+
+ turn off support for "wrapped" document/literal<br>
-s, --server-side <br>
emit server-side bindings for web service <br>
@@ -69,38 +80,56 @@
-t, --testCase <br>
emit junit testcase class for web service <br>
- -n, --noImports <br>
-
- only generate code for the immediate WSDL document <br>
-a, --all <br>
generate code for all elements, even unreferenced ones <br>
- -D, --Debug <br>
+ -T, --typeMappingVersion <br>
- print debug information <br>
+ indicate 1.1 or 1.2. The default is 1.1 (SOAP 1.1 JAX-RPC compliant.
+
+ 1.2 indicates SOAP 1.1 encoded.) <br>
-F, --factory <argument> <br>
-
- name of the JavaWriterFactory class for extending Java generation functions
- <br>
-
- ompliant) <br>
- -O, --timeout <argument> <br>
-
- timeout in seconds (default is 45, specify -1 to disable) <br>
+
+ name of a custom class that implements GeneratorFactory interface
+
+ (for extending Java generation functions) <br>
+ -H, --helperGen <br>
+
+ emits separate Helper classes for meta data <br>
-U, --user <argument> <br>
username to access the WSDL-URI <br>
-P, --password <argument> <br>
password to access the WSDL-URI <br>
- -W, --noWrapped<br>
-
- turn off support for "wrapped" document/literal<br>
<h4> -h, --help</h4>
Print the usage statement and exit
<h4> -v, --verbose</h4>
See what the tool is generating as it is generating it.
+<h4> -n, --noImports</h4>
+Only generate code for the WSDL document that appears on the command line.
+The default behaviour is to generate files for all WSDL documents, the immediate
+one and all imported ones.
+<h4> -O, --timeout</h4>
+Timeout in seconds. The default is 45. Use -1 to disable the timeout.
+<h4> -D, --Debug</h4>
+Print debug information, which currently is WSDL2Java's symbol table. Note that
this is only printed after the symbol table is complete, ie., after the WSDL is parsed
successfully.
+<h4>-W, --noWrapped</h4>
+This turns off the special treatment of what is called "wrapped" document/literal
+style operations. By default, WSDL2Java will recognize the following
+conditions:<br>
+<ul>
+ <li>If an input message has is a single part.</li>
+ <li>The part is an element.</li>
+ <li>The element has the same name as the operation</li>
+ <li>The element's complex type has no attributes<br>
+ </li>
+</ul>
+When it sees this, WSDL2Java will 'unwrap' the top level element, and treat each
+of the components of the element as arguments to the operation. This type of WSDL
+is the default for Microsoft .NET web services, which wrap up RPC style arguments
+in this top level schema element.
<h4> -s, --server-side</h4>
Emit the server-side bindings for the web service:
<ul>
@@ -172,10 +201,6 @@
0 or false for primitive types). Like the generated implementation file,
the generated test case file could be considered a template that you may fill
in.
-<h4> -n, --noImports</h4>
-Only generate code for the WSDL document that appears on the command line.
-The default behaviour is to generate files for all WSDL documents, the immediate
-one and all imported ones.
<h4> -a, --all</h4>
Generate code for all elements, even unreferenced ones. By default, WSDL2Java
only generates code for those elements in the WSDL file that are referenced.
@@ -197,13 +222,13 @@
then that portType will be generated and only those types that are referenced
by that portType.
<p>Note that the anchor is searched for in the WSDL file appearing on the command
line, <b>not</b> in imported WSDL files. This allows one WSDL file to import
constructs defined in another WSDL file without the nuisance of having all the
imported WSDL file's constructs generated.
-<h4> -D, --Debug</h4>
-Print debug information, which currently is WSDL2Java's symbol table.
<h4> -T, --typeMappingVersion <argument></h4>
Indicate 1.1 or 1.2. The default is 1.2 (SOAP 1.2 JAX-RPC compliant).
<h4> -F, --factory <argument></h4>
Used to extend the functionality of the WSDL2Java emitter. The argument is the
name of a class which extends JavaWriterFactory.
+<h4> -H, --helperGen</h4>
+Emits separate Helper classes for meta data.
<h4> -U, --user <argument></h4>
This username is used in resolving the WSDL-URI provided as the input to WSDL2Java.
If the URI contains a username, this will override the command line switch.
@@ -212,21 +237,6 @@
This password is used in resolving the WSDL-URI provided as the input to WSDL2Java.
If the URI contains a password, this will override the command line
switch.
<br>
-<h4>-W, --noWrapped</h4>
-This turns off the special treatment of what is called "wrapped" document/literal
-style operations. By default, WSDL2Java will recognize the following
-conditions:<br>
-<ul>
- <li>If an input message has is a single part.</li>
- <li>The part is an element.</li>
- <li>The element has the same name as the operation</li>
- <li>The element's complex type has no attributes<br>
- </li>
-</ul>
-When it sees this, WSDL2Java will 'unwrap' the top level element, and treat each
-of the components of the element as arguments to the operation. This type of WSDL
-is the default for Microsoft .NET web services, which wrap up RPC style arguments
-in this top level schema element.<br>
<h3><a name="Java2WSDL"></a>Java2WSDL Reference</h3>
<p>Here is the help message generated from the current tool: </p>
@@ -300,13 +310,9 @@
<tt><font color="#993366"> -O,
--outputImpl
<argument></font></tt> <br>
<tt><font
color="#993366">
- output Implementation WSDL filename, setting this causes --outputWsdlMode to
- be ignored</font></tt> <br>
- <tt><font color="#993366"> -f,
--factory
- <argument></font></tt> <br>
+ output Implementation WSDL filename, setting this causes</font></tt> <br>
<tt><font
color="#993366">
- name of the Java2WSDLFactory class for extending WSDL generation
functions</font></tt>
- <br>
+ --outputWsdlMode to be ignored</font></tt> <br>
<tt><font color="#993366"> -i,
--implClass
<argument></font></tt> <br>
<tt><font
color="#993366">
@@ -322,10 +328,6 @@
<argument></font></tt> <br>
<tt><font
color="#993366">
space or comma separated list of methods not to export</font></tt> <br>
- <tt><font color="#993366"> -y, --style
- <argument></font></tt> <br>
- <tt><font
color="#993366">
- the style of the wsdl document: RPC, DOCUMENT or WRAPPED</font></tt> <br>
<tt><font color="#993366"> -c,
--stopClasses
<argument></font></tt> <br>
<tt><font
color="#993366">
@@ -338,6 +340,22 @@
<tt><font
color="#993366">
indicate 1.1 or 1.2. The default is 1.2 (SOAP 1.2 JAX-RPC compliant)</font></tt>
<br>
+ <tt><font color="#993366"> -A,
--soapAction
+ <argument></font></tt> <br>
+ <tt><font
color="#993366">
+ value of the operations soapAction field. Values are DEFAULT,</font></tt> <br>
+ <tt><font
color="#993366">
+ OPERATION or NONE. OPERATION forces soapAction to the name</font></tt> <br>
+ <tt><font
color="#993366">
+ of the operation. DEFAULT causes the soapAction to be set</font></tt> <br>
+ <tt><font
color="#993366">
+ according to the operations meta data (usually ""). NONE</font></tt> <br>
+ <tt><font
color="#993366">
+ forces the soapAction to "". The default is DEFAULT.</font></tt> <br>
+ <tt><font color="#993366"> -y, --style
+ <argument></font></tt> <br>
+ <tt><font
color="#993366">
+ the style of the wsdl document: RPC, DOCUMENT or WRAPPED</font></tt> <br>
<tt><font color="#993366">Details:</font></tt> <br>
<tt><font color="#993366"> portType element name= <.portTypeName
value> OR <class-of-portType name></font></tt> <br>
@@ -352,27 +370,27 @@
<p><b>-h , --help</b> <br>
Prints the help message.
-<p><b>-o, --output <WSDL file></b> <br>
- Indicates the name of the output WSDL file. If not specified, a suitable
- default WSDL file is written into the current directory.
<p><b>-I, --input <WSDL file></b> <br>
Optional parameter that indicates the name of the input wsdl file. The output
wsdl file will contain everything from the input wsdl file plus the new
constructs.
If a new construct is already present in the input wsdl file, it is not added.
This option is useful for constructing a wsdl file with multiple ports, bindings,
or portTypes.
+<p><b>-o, --output <WSDL file></b> <br>
+ Indicates the name of the output WSDL file. If not specified, a suitable
+ default WSDL file is written into the current directory.
<p><b>-l, --location <location></b> <br>
Indicates the url of the location of the service. The name after the last
slash or backslash is the name of the service port (unless overridden by the
-s option). The service port address location attribute is assigned the
specified value.
-<p><b>-p, --portTypeName <name></b> <br>
+<p><b>-P, --portTypeName <name></b> <br>
Indicates the name to use use for the portType element. If not specified, the
class-of-portType name is used.
<p><b>-b, --bindingName <name></b> <br>
Indicates the name to use use for the binding element. If not specified, the
value of the --servicePortName + "SoapBinding" is used.
-<p><b>-s, --serviceElementName <name></b> <br>
+<p><b>-S, --serviceElementName <name></b> <br>
Indicates the name of the service element. If not specified, the service
element is the <portTypeName>Service.
<p><b>-s, --servicePortName <name></b> <br>
@@ -411,24 +429,22 @@
Use this option to indicate the name of the output implementation WSDL
file.
If specified, Java2WSDL will produce interface and implementation WSDL
files.
If this option is used, the -w option is ignored.
-<p><b>-f, --factory <class></b> <br>
- (No longer used.)
<p><b>-i, --implClass <impl-class></b> <br>
Sometimes extra information is available in the implementation class file. Use
this option to specify the implementation class.
-<p><b>-f, --factory <class></b> <br>
- (No longer used.)
<p><b>-x, --exclude <list></b> <br>
List of methods to not exclude from the wsdl file.
+<p><b>-c, --stopClasses <list></b> <br>
+ List of classes which stop the Java2WSDL inheritance search.
+<p><b>-T, --typeMappingVersion <version></b> <br>
+ Choose the default type mapping registry to use. Either 1.1 or 1.2.</p>
+<p><b>-A, --soapAction <argument></b> <br>
+ The value of the operations soapAction field. Values are DEFAULT, OPERATION or
NONE. OPERATION forces soapAction to the name of the operation. DEFAULT causes the
soapAction to be set according to the operation's meta data (usually ""). NONE forces
the soapAction to "". The default is DEFAULT.
<p><b>-y, --style <argument></b> <br>
The style of the WSDL document: RPC, DOCUMENT or WRAPPED.
If RPC, a rpc/encoded wsdl is generated.
If DOCUMENT, a document/literal wsdl is generated.
If WRAPPED, a document/literal wsdl is generated using the wrapped approach.
-<p><b>-c, --stopClasses <list></b> <br>
- List of classes which stop the Java2WSDL inheritance search.
-<p><b>-T, --typeMappingVersion <version></b> <br>
- Choose the default type mapping registry to use. Either 1.1 or 1.2.</p>
<h2><a name="Deployment"></a>Deployment (WSDD) Reference</h2>
Note : all the elements referred to in this section are in the WSDD namespace,
namely "http://xml.apache.org/axis/wsdd/".
1.73.2.1 +27 -16 xml-axis/java/docs/user-guide.html
Index: user-guide.html
===================================================================
RCS file: /home/cvs/xml-axis/java/docs/user-guide.html,v
retrieving revision 1.73
retrieving revision 1.73.2.1
diff -u -r1.73 -r1.73.2.1
--- user-guide.html 30 Sep 2002 01:39:24 -0000 1.73
+++ user-guide.html 8 Oct 2002 01:31:19 -0000 1.73.2.1
@@ -600,8 +600,15 @@
<h2><a NAME="DataMapping"></a>XML <-> Java Data Mapping in Axis</h2>
<h3>How your Java types map to SOAP/XML types</h3>
-The JAX-RPC specification determines how Java types are mapped to WSDL and vice
versa.
-So read chapters 4 and 5 of the <a href="http://java.sun.com/xml/jaxrpc/">
+Interoperability, <i>interop</i> is an ongoing challenge
+between SOAP implementations. If you want your service to work with other platforms
+and implementations, you do need to understand the issues. There are some
+<a href="reading.html#interop">external articles</a> on the subject that act
+as a good starting place.
+
+The basic mapping between Java types and WSDL/XSD/SOAP in Axis is determined by
+The JAX-RPC specification. Read chapters 4 and 5 of the
+<a href="http://java.sun.com/xml/jaxrpc/">
specification</a> to fully understand how things are converted. Here are
some of the salient points.
@@ -627,10 +634,12 @@
may choose to return a value of <tt>nil</tt>, then the primitive data types
are replaced by their wrapper classes, such as Byte, Double, Boolean, etc.
<h4>SOAP Encoding Datatypes</h4>
-<p> Alongside the XSD datatypes are the SOAP 'section 5' datatypes that are all
+<p> Alongside the XSD datatypes are the SOAP 'Section 5' datatypes that are all
nillable, and so only ever map to the wrapper classes. These types exist because
they all support the "ID" and "HREF" attributes, and so
will be used when in an rpc-encoded context to support multi-ref serialization.
+
+
<h3>Exceptions</h3>
This is an area which causes plenty of confusion, and indeed, the author
@@ -689,7 +698,7 @@
at least not be as rigorous as Java in the rules as to how exceptions
must be handled.
-<h4>What Axis can not send via SOAP</h4>
+<h3>What Axis can send via SOAP with restricted Interoperability</h3>
<h5>Unsigned data</h5>
@@ -703,30 +712,32 @@
with unsigned support from using them. At least, until
a revision of JAX-RPC adds this.
+<h5>Java Collections</h5>
+
+Some of the Collection classes, such as <tt>HashTable</tt> do have
+serializers, but there is no formal interoperability with other SOAP
+implementations, and nothing in the SOAP specifications which covers
+complex objects. The most reliable way to send aggregate objects is to
+use arrays. In particular, .NET cannot handle them, though many Java SOAP
+implementations can marshall and unmarshall hash tables.
+
+
+<h3>What Axis can not send via SOAP</h3>
-<h5>Arbitrary Objects without registration</h5>
+
+<h5>Arbitrary Objects without Pre-Registration</h5>
You cannot send arbitrary Java objects over the wire and expect them to
be understood at the far end. With RMI you can send and receive
<tt>Serializable</tt> Java objects, but that is because you are running
Java at both ends. Axis will only send objects for which there is a
-registered Axis serializer. This document will shortly show how to use
+registered Axis serializer. This document shows below how to use
the BeanSerializer to serialize any class that follows the JavaBean
pattern of accessor and mutator. To serve up objects you must either
register your classes with this BeanSerializer, or there must be
serialization support built in to Axis.
-<h5>Java Collections</h5>
-
-Some of the Collection classes, such as <tt>HashTable</tt> do have
-serializers, but there is no formal interoperability with other SOAP
-implementations, and nothing in the SOAP specifications which covers
-complex objects. The most reliable way to send aggregate objects is to
-use arrays.
-
-This is an ongoing issue with SOAP interop; expect it to slowly improve
-over time.
<h5>Remote References</h5>
No revision
No revision
1.1.4.1 +0 -0 xml-axis/java/docs/AxisJMSSample.pdf
<<Binary file>>
No revision
No revision
1.1.4.1 +0 -0 xml-axis/java/samples/jms/AxisJMSSample.pdf
<<Binary file>>
No revision
No revision
1.44.2.1 +7 -5 xml-axis/java/src/org/apache/axis/FaultableHandler.java
Index: FaultableHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/FaultableHandler.java,v
retrieving revision 1.44
retrieving revision 1.44.2.1
diff -u -r1.44 -r1.44.2.1
--- FaultableHandler.java 18 Sep 2002 16:10:31 -0000 1.44
+++ FaultableHandler.java 8 Oct 2002 01:31:20 -0000 1.44.2.1
@@ -134,11 +134,13 @@
Handler faultHandler = null;
Hashtable options = getOptions();
- Enumeration enum = options.keys();
- while (enum.hasMoreElements()) {
- String s = (String) enum.nextElement();
- if (s.equals("fault-" + fault.getFaultCode().getLocalPart())) {
- faultHandler = (Handler)options.get(s);
+ if (options != null) {
+ Enumeration enum = options.keys();
+ while (enum.hasMoreElements()) {
+ String s = (String) enum.nextElement();
+ if (s.equals("fault-" + fault.getFaultCode().getLocalPart())) {
+ faultHandler = (Handler)options.get(s);
+ }
}
}
No revision
No revision
1.38.4.1 +9 -3 xml-axis/java/src/org/apache/axis/handlers/BasicHandler.java
Index: BasicHandler.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/BasicHandler.java,v
retrieving revision 1.38
retrieving revision 1.38.4.1
diff -u -r1.38 -r1.38.4.1
--- BasicHandler.java 12 Aug 2002 22:58:46 -0000 1.38
+++ BasicHandler.java 8 Oct 2002 01:31:20 -0000 1.38.4.1
@@ -84,14 +84,20 @@
protected static Log log =
LogFactory.getLog(BasicHandler.class.getName());
+ protected boolean makeLockable = false;
protected Hashtable options;
protected String name;
/**
* Should this Handler use a LockableHashtable for options?
+ * Default is 'false'.
*/
- protected void initHashtable(boolean makeLockable)
+ protected void setOptionsLockable(boolean makeLockable) {
+ this.makeLockable = makeLockable;
+ }
+
+ protected void initHashtable()
{
if (makeLockable) {
options = new LockableHashtable();
@@ -128,7 +134,7 @@
* Set the given option (name/value) in this handler's bag of options
*/
public void setOption(String name, Object value) {
- if ( options == null ) initHashtable(false);
+ if ( options == null ) initHashtable();
options.put( name, value );
}
@@ -166,7 +172,7 @@
}
public void setOptions(Hashtable opts) {
- options = opts ;
+ options = opts;
}
/**
No revision
No revision
1.84.2.1 +2 -1 xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java
Index: SOAPService.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/handlers/soap/SOAPService.java,v
retrieving revision 1.84
retrieving revision 1.84.2.1
diff -u -r1.84 -r1.84.2.1
--- SOAPService.java 18 Sep 2002 16:10:40 -0000 1.84
+++ SOAPService.java 8 Oct 2002 01:31:20 -0000 1.84.2.1
@@ -235,7 +235,8 @@
*/
public SOAPService()
{
- initHashtable(true);
+ setOptionsLockable(true);
+ initHashtable();
// For now, always assume we're the ultimate destination.
// TODO : Handle SOAP 1.2 ultimateDestination actor as well
No revision
No revision
1.74.2.1 +10 -2
xml-axis/java/src/org/apache/axis/transport/http/SimpleAxisServer.java
Index: SimpleAxisServer.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/transport/http/SimpleAxisServer.java,v
retrieving revision 1.74
retrieving revision 1.74.2.1
diff -u -r1.74 -r1.74.2.1
--- SimpleAxisServer.java 18 Sep 2002 16:10:30 -0000 1.74
+++ SimpleAxisServer.java 8 Oct 2002 01:31:21 -0000 1.74.2.1
@@ -71,7 +71,7 @@
import java.util.Hashtable;
/**
- * This is a single threaded implementation of an HTTP server for processing
+ * This is a simple implementation of an HTTP server for processing
* SOAP requests via Apache's xml-axis. This is not intended for production
* use. Its intended uses are for demos, debugging, and performance
* profiling.
@@ -95,7 +95,7 @@
private Hashtable sessions = new Hashtable();
// Are we doing threads?
- private static boolean doThreads = false;
+ private static boolean doThreads = true;
// Are we doing sessions?
// Set this to false if you don't want any session overhead.
@@ -103,6 +103,14 @@
protected boolean isSessionUsed() {
return doSessions;
+ }
+
+ public void setDoThreads(boolean value) {
+ doThreads = value ;
+ }
+
+ public boolean getDoThreads() {
+ return doThreads ;
}
protected Session createSession(String cooky) {
No revision
No revision
1.80.2.1 +4 -0 xml-axis/java/src/org/apache/axis/utils/JavaUtils.java
Index: JavaUtils.java
===================================================================
RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/JavaUtils.java,v
retrieving revision 1.80
retrieving revision 1.80.2.1
diff -u -r1.80 -r1.80.2.1
--- JavaUtils.java 18 Sep 2002 16:10:41 -0000 1.80
+++ JavaUtils.java 8 Oct 2002 01:31:21 -0000 1.80.2.1
@@ -509,6 +509,10 @@
// Allow mapping of HashMaps to Hashtables
if (src == HashMap.class && dest == Hashtable.class)
return true;
+
+ // Allow mapping of Calendar to Date
+ if (Calendar.class.isAssignableFrom(src) && dest == Date.class)
+ return true;
}
Class destHeld = JavaUtils.getHolderValueType(dest);
No revision
No revision
1.3.4.3 +182 -4
xml-axis/java/src/org/apache/axis/wsdl/symbolTable/BindingEntry.java
Index: BindingEntry.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/BindingEntry.java,v
retrieving revision 1.3.4.2
retrieving revision 1.3.4.3
diff -u -r1.3.4.2 -r1.3.4.3
--- BindingEntry.java 5 Oct 2002 05:26:07 -0000 1.3.4.2
+++ BindingEntry.java 8 Oct 2002 01:31:21 -0000 1.3.4.3
@@ -94,9 +94,13 @@
private HashMap faults = new HashMap();
// This is a map of a map. It's a map keyed on operation name whose values
- // are maps keyed on parameter name.
+ // are maps keyed on parameter name. The ultimate values are simple Strings.
private Map mimeTypes;
-
+
+ // This is a map of a map. It's a map keyed on operation name whose values
+ // are maps keyed on parameter name. The ultimate values are simple
+ // Booleans.
+ private Map headerParameters;
/**
* Construct a BindingEntry from a WSDL4J Binding object and the additional
binding info:
@@ -104,19 +108,59 @@
* contain the input/output/fault body type information.
*/
public BindingEntry(Binding binding, int bindingType, int bindingStyle,
- boolean hasLiteral, HashMap attributes, Map mimeTypes) {
+ boolean hasLiteral, HashMap attributes, Map mimeTypes,
+ Map headerParameters) {
super(binding.getQName());
this.binding = binding;
this.bindingType = bindingType;
this.bindingStyle = bindingStyle;
this.hasLiteral = hasLiteral;
- this.attributes = attributes;
+ if (attributes == null) {
+ this.attributes = new HashMap();
+ }
+ else {
+ this.attributes = attributes;
+ }
if (mimeTypes == null) {
this.mimeTypes = new HashMap();
}
else {
this.mimeTypes = mimeTypes;
}
+ if (headerParameters == null) {
+ this.headerParameters = new HashMap();
+ }
+ else {
+ this.headerParameters = headerParameters;
+ }
+ } // ctor
+
+ /**
+ * This is a minimal constructor. Everything will be set up with
+ * defaults. If the defaults aren't desired, then the appropriate
+ * setter method should be called. The defaults are:
+ * bindingType = TYPE_UNKNOWN
+ * bindingStyle = STYLE_DOCUMENT
+ * hasLiteral = false
+ * operation inputBodyTypes = USE_ENCODED
+ * operation outputBodyTypes = USE_ENCODED
+ * operation faultBodyTypes = USE_ENCODED
+ * mimeTypes = null
+
+The caller of this constructor should
+ * also call the various setter methods to fully fill out this object:
+ * setBindingType, setBindingStyle, setHasLiteral, setAttribute,
+ * setMIMEType.
+ */
+ public BindingEntry(Binding binding) {
+ super(binding.getQName());
+ this.binding = binding;
+ this.bindingType = TYPE_UNKNOWN;
+ this.bindingStyle = STYLE_DOCUMENT;
+ this.hasLiteral = false;
+ this.attributes = new HashMap();
+ this.mimeTypes = new HashMap();
+ this.headerParameters = new HashMap();
} // ctor
/**
@@ -174,6 +218,41 @@
} // setMIMEType
/**
+ * Get the mime mapping for the given parameter name.
+ * If there is none, this returns null.
+ */
+ public boolean isHeaderParameter(String operationName,
+ String parameterName) {
+ Map opMap = (Map) headerParameters.get(operationName);
+ if (opMap == null) {
+ return false;
+ }
+ else {
+ Boolean bool = (Boolean) opMap.get(parameterName);
+ return bool == null ? false : bool.booleanValue();
+ }
+ } // isHeaderParameter
+
+ /**
+ * Get the header parameter map.
+ */
+ public Map getHeaderParameters() {
+ return headerParameters;
+ } // getHeaderParameters
+
+ /**
+ * Set the header parameter mapping for the given parameter name.
+ */
+ public void setHeaderParameter(String operationName, String parameterName,
boolean isHeader) {
+ Map opMap = (Map) headerParameters.get(operationName);
+ if (opMap == null) {
+ opMap = new HashMap();
+ headerParameters.put(operationName, opMap);
+ }
+ opMap.put(parameterName, new Boolean(isHeader));
+ } // setHeaderParameter
+
+ /**
* Get this entry's WSDL4J Binding object.
*/
public Binding getBinding() {
@@ -189,6 +268,15 @@
} // getBindingType
/**
+ * Set this entry's binding type.
+ */
+ protected void setBindingType(int bindingType) {
+ if (bindingType >= TYPE_SOAP && bindingType <= TYPE_UNKNOWN) {
+ }
+ this.bindingType = bindingType;
+ } // setBindingType
+
+ /**
* Get this entry's binding style. One of BindingEntry.STYLE_RPC,
BindingEntry.STYLE_DOCUMENT.
*/
public int getBindingStyle() {
@@ -196,6 +284,15 @@
} // getBindingStyle
/**
+ * Set this entry's binding style.
+ */
+ protected void setBindingStyle(int bindingStyle) {
+ if (bindingStyle == STYLE_RPC || bindingStyle == STYLE_DOCUMENT) {
+ this.bindingStyle = bindingStyle;
+ }
+ } // setBindingStyle
+
+ /**
* Do any of the message stanzas contain a soap:body which uses literal?
*/
public boolean hasLiteral() {
@@ -203,6 +300,13 @@
} // hasLiteral
/**
+ * Set the literal flag.
+ */
+ protected void setHasLiteral(boolean hasLiteral) {
+ this.hasLiteral = hasLiteral;
+ } // setHashLiteral
+
+ /**
* Get the input body type for the given operation. One of
BindingEntry.USE_ENCODED,
* BindingEntry.USE_LITERAL.
*/
@@ -217,6 +321,21 @@
} // getInputBodyType
/**
+ * Set the input body type for the given operation.
+ */
+ protected void setInputBodyType(Operation operation, int inputBodyType) {
+ OperationAttr attr = (OperationAttr) attributes.get(operation);
+ if (attr == null) {
+ attr = new OperationAttr();
+ attributes.put(operation, attr);
+ }
+ attr.setInputBodyType(inputBodyType);
+ if (inputBodyType == USE_LITERAL) {
+ setHasLiteral(true);
+ }
+ } // setInputBodyType
+
+ /**
* Get the output body type for the given operation. One of
BindingEntry.USE_ENCODED,
* BindingEntry.USE_LITERAL.
*/
@@ -231,6 +350,35 @@
} // getOutputBodyType
/**
+ * Set the output body type for the given operation.
+ */
+ protected void setOutputBodyType(Operation operation, int outputBodyType) {
+ OperationAttr attr = (OperationAttr) attributes.get(operation);
+ if (attr == null) {
+ attr = new OperationAttr();
+ attributes.put(operation, attr);
+ }
+ attr.setOutputBodyType(outputBodyType);
+ if (outputBodyType == USE_LITERAL) {
+ setHasLiteral(true);
+ }
+ } // setOutputBodyType
+
+ /**
+ * Set the body type for the given operation. If input is true,
+ * then this is the inputBodyType, otherwise it's the outputBodyType.
+ * (NOTE: this method exists to enable reusing some SymbolTable code.
+ */
+ protected void setBodyType(Operation operation, int bodyType, boolean input) {
+ if (input) {
+ setInputBodyType(operation, bodyType);
+ }
+ else {
+ setOutputBodyType(operation, bodyType);
+ }
+ } // setBodyType
+
+ /**
* Get the fault body type for the given fault of the given operation. One of
* BindingEntry.USE_ENCODED, BindingEntry.USE_LITERAL.
*/
@@ -268,6 +416,18 @@
}
/**
+ * Set the fault body type map for the given operation.
+ */
+ protected void setFaultBodyTypeMap(Operation operation, HashMap
faultBodyTypeMap) {
+ OperationAttr attr = (OperationAttr) attributes.get(operation);
+ if (attr == null) {
+ attr = new OperationAttr();
+ attributes.put(operation, attr);
+ }
+ attr.setFaultBodyTypeMap(faultBodyTypeMap);
+ } // setInputBodyTypeMap
+
+ /**
* Contains attributes for Operations
* - Body type: encoded or literal
*/
@@ -282,16 +442,34 @@
this.faultBodyTypeMap = faultBodyTypeMap;
}
+ public OperationAttr() {
+ this.inputBodyType = USE_ENCODED;
+ this.outputBodyType = USE_ENCODED;
+ this.faultBodyTypeMap = null;
+ }
+
public int getInputBodyType() {
return inputBodyType;
}
+ protected void setInputBodyType(int inputBodyType) {
+ this.inputBodyType = inputBodyType;
+ }
+
public int getOutputBodyType() {
return outputBodyType;
}
+ protected void setOutputBodyType(int outputBodyType) {
+ this.outputBodyType = outputBodyType;
+ }
+
public HashMap getFaultBodyTypeMap() {
return faultBodyTypeMap;
+ }
+
+ protected void setFaultBodyTypeMap(HashMap faultBodyTypeMap) {
+ this.faultBodyTypeMap = faultBodyTypeMap;
}
} // class OperationAttr
1.3.4.1 +12 -1
xml-axis/java/src/org/apache/axis/wsdl/symbolTable/Parameter.java
Index: Parameter.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/Parameter.java,v
retrieving revision 1.3
retrieving revision 1.3.4.1
diff -u -r1.3 -r1.3.4.1
--- Parameter.java 24 Jul 2002 16:15:03 -0000 1.3
+++ Parameter.java 8 Oct 2002 01:31:21 -0000 1.3.4.1
@@ -79,11 +79,14 @@
private TypeEntry type;
private byte mode = IN;
+ private boolean inHeader = false;
+
public String toString() {
return "(" + type
+ (mimeType == null ? "" : "(" + mimeType + ")")
+ ", " + getName() + ", "
- + (mode == IN ? "IN)" : mode == INOUT ? "INOUT)" : "OUT)");
+ + (mode == IN ? "IN)" : mode == INOUT ? "INOUT)" : "OUT)"
+ + (inHeader ? "(soap:header)" : ""));
} // toString
public QName getQName() {
@@ -130,4 +133,12 @@
public void setMode(byte mode) {
this.mode = mode;
}
+
+ public boolean inHeader() {
+ return inHeader;
+ } // inHeader
+
+ public void setInHeader(boolean inHeader) {
+ this.inHeader = inHeader;
+ } // setInHeader
} // class Parameter
1.41.4.4 +96 -67
xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java
Index: SymbolTable.java
===================================================================
RCS file:
/home/cvs/xml-axis/java/src/org/apache/axis/wsdl/symbolTable/SymbolTable.java,v
retrieving revision 1.41.4.3
retrieving revision 1.41.4.4
diff -u -r1.41.4.3 -r1.41.4.4
--- SymbolTable.java 5 Oct 2002 05:44:34 -0000 1.41.4.3
+++ SymbolTable.java 8 Oct 2002 01:31:21 -0000 1.41.4.4
@@ -102,6 +102,7 @@
import javax.wsdl.extensions.soap.SOAPBinding;
import javax.wsdl.extensions.soap.SOAPBody;
import javax.wsdl.extensions.soap.SOAPFault;
+import javax.wsdl.extensions.soap.SOAPHeader;
import javax.xml.rpc.holders.BooleanHolder;
import javax.xml.rpc.holders.IntHolder;
@@ -614,7 +615,7 @@
if (!importedFiles.contains(url)) {
importedFiles.add(url);
String filename = url.toString();
- populate(context, null,
+ populate(url, null,
XMLUtils.newDocument(filename), filename);
}
}
@@ -1262,6 +1263,10 @@
BindingEntry bindingEntry)
throws IOException {
+ // HACK ALERT! This whole method is waaaay too complex.
+ // It needs rewriting (for instance, we sometimes new up
+ // a Parameter, then ignore it in favor of another we new up.)
+
// Determine if there's only one element. For wrapped
// style, we normally only have 1 part which is an
// element. But with MIME we could have any number of
@@ -1329,6 +1334,10 @@
}
setMIMEType(param, bindingEntry == null ? null :
bindingEntry.getMIMEType(opName, partName));
+ if (bindingEntry != null &&
+ bindingEntry.isHeaderParameter(opName, partName)) {
+ param.setInHeader(true);
+ }
v.add(param);
@@ -1409,6 +1418,9 @@
p.setType(elem.getType());
setMIMEType(p, bindingEntry == null ? null :
bindingEntry.getMIMEType(opName, partName));
+ if (bindingEntry.isHeaderParameter(opName, partName)) {
+ p.setInHeader(true);
+ }
v.add(p);
}
} else {
@@ -1424,6 +1436,9 @@
}
setMIMEType(param, bindingEntry == null ? null :
bindingEntry.getMIMEType(opName, partName));
+ if (bindingEntry.isHeaderParameter(opName, partName)) {
+ param.setInHeader(true);
+ }
v.add(param);
}
@@ -1465,40 +1480,45 @@
private void populateBindings(Definition def) throws IOException {
Iterator i = def.getBindings().values().iterator();
while (i.hasNext()) {
- int bindingStyle = BindingEntry.STYLE_DOCUMENT;
- int bindingType = BindingEntry.TYPE_UNKNOWN;
Binding binding = (Binding) i.next();
+
+ BindingEntry bEntry = new BindingEntry(binding);
+ symbolTablePut(bEntry);
+
Iterator extensibilityElementsIterator =
binding.getExtensibilityElements().iterator();
while (extensibilityElementsIterator.hasNext()) {
Object obj = extensibilityElementsIterator.next();
if (obj instanceof SOAPBinding) {
- bindingType = BindingEntry.TYPE_SOAP;
+ bEntry.setBindingType(BindingEntry.TYPE_SOAP);
SOAPBinding sb = (SOAPBinding) obj;
String style = sb.getStyle();
if ("rpc".equalsIgnoreCase(style)) {
- bindingStyle = BindingEntry.STYLE_RPC;
+ bEntry.setBindingStyle(BindingEntry.STYLE_RPC);
}
}
else if (obj instanceof HTTPBinding) {
HTTPBinding hb = (HTTPBinding) obj;
if (hb.getVerb().equalsIgnoreCase("post")) {
- bindingType = BindingEntry.TYPE_HTTP_POST;
+ bEntry.setBindingType(BindingEntry.TYPE_HTTP_POST);
}
else {
- bindingType = BindingEntry.TYPE_HTTP_GET;
+ bEntry.setBindingType(BindingEntry.TYPE_HTTP_GET);
}
}
}
- // Check the Binding Operations for use="literal"
- boolean hasLiteral = false;
+ // Step through the binding operations, setting the following as
appropriate:
+ // - hasLiteral
+ // - body types
+ // - mimeTypes
+ // - headers
HashMap attributes = new HashMap();
List bindList = binding.getBindingOperations();
- Map mimeTypes = new HashMap();
HashMap faultMap = new HashMap(); // name to SOAPFault from WSDL4J
for (Iterator opIterator = bindList.iterator(); opIterator.hasNext();) {
BindingOperation bindOp = (BindingOperation) opIterator.next();
+ Operation operation = bindOp.getOperation();
BindingInput bindingInput = bindOp.getBindingInput();
BindingOutput bindingOutput = bindOp.getBindingOutput();
String opName = bindOp.getName();
@@ -1514,35 +1534,11 @@
new String[] {opName, inputName, outputName}));
}
- int inputBodyType = BindingEntry.USE_ENCODED;
- int outputBodyType = BindingEntry.USE_ENCODED;
- Map opMimeTypes = new HashMap();
- mimeTypes.put(opName, opMimeTypes);
-
// input
if (bindingInput != null) {
if (bindingInput.getExtensibilityElements() != null) {
Iterator inIter =
bindingInput.getExtensibilityElements().iterator();
- for (; inIter.hasNext();) {
- Object obj = inIter.next();
- if (obj instanceof SOAPBody) {
- String use = ((SOAPBody) obj).getUse();
- if (use == null) {
- throw new IOException(Messages.getMessage(
- "noUse", opName));
- }
- if (use.equalsIgnoreCase("literal")) {
- inputBodyType = BindingEntry.USE_LITERAL;
- }
- break;
- }
- else if (obj instanceof MIMEMultipartRelated) {
- IntHolder holder = new IntHolder(inputBodyType);
- opMimeTypes.putAll(collectMIMETypes(
- (MIMEMultipartRelated) obj, holder,
bindOp));
- inputBodyType = holder.value;
- }
- }
+ fillInBindingInfo(bEntry, operation, inIter, true);
}
}
@@ -1550,26 +1546,7 @@
if (bindingOutput != null) {
if (bindingOutput.getExtensibilityElements() != null) {
Iterator outIter =
bindingOutput.getExtensibilityElements().iterator();
- for (; outIter.hasNext();) {
- Object obj = outIter.next();
- if (obj instanceof SOAPBody) {
- String use = ((SOAPBody) obj).getUse();
- if (use == null) {
- throw new IOException(Messages.getMessage(
- "noUse", opName));
- }
- if (use.equalsIgnoreCase("literal")) {
- outputBodyType = BindingEntry.USE_LITERAL;
- }
- break;
- }
- else if (obj instanceof MIMEMultipartRelated) {
- IntHolder holder = new IntHolder(outputBodyType);
- opMimeTypes.putAll(collectMIMETypes(
- (MIMEMultipartRelated) obj, holder,
bindOp));
- outputBodyType = holder.value;
- }
- }
+ fillInBindingInfo(bEntry, operation, outIter, false);
}
}
@@ -1616,7 +1593,6 @@
// Check this fault to make sure it matches the one
// in the matching portType Operation
- Operation operation = bindOp.getOperation();
Fault opFault = operation.getFault(bFault.getName());
if (opFault == null) {
throw new IOException(
@@ -1633,8 +1609,12 @@
soapFault,
xmlType));
}
+
// Add this fault name and info to the map
faultMap.put(bindOp, faults);
+
+ int inputBodyType = bEntry.getInputBodyType(operation);
+ int outputBodyType = bEntry.getOutputBodyType(operation);
// Associate the portType operation that goes with this binding
// with the body types.
@@ -1645,21 +1625,70 @@
// NOTE: should I include faultBodyType in this check?
if (inputBodyType == BindingEntry.USE_LITERAL ||
outputBodyType == BindingEntry.USE_LITERAL) {
- hasLiteral = true;
+ bEntry.setHasLiteral(true);
}
+ bEntry.setFaultBodyTypeMap(operation, faultMap);
} // binding operations
- BindingEntry bEntry = new BindingEntry(binding, bindingType,
bindingStyle, hasLiteral, attributes, mimeTypes);
+
bEntry.setFaults(faultMap);
symbolTablePut(bEntry);
}
} // populateBindings
/**
- * Collect the list of those parts that are really MIME types.
+ * Fill in some binding information: bodyType, mimeType, header info.
+ */
+ private void fillInBindingInfo(BindingEntry bEntry, Operation operation,
+ Iterator it, boolean input) throws IOException {
+ for (; it.hasNext();) {
+ Object obj = it.next();
+ if (obj instanceof SOAPBody) {
+ setBodyType(((SOAPBody) obj).getUse(), bEntry, operation,
+ input);
+ }
+ else if (obj instanceof SOAPHeader) {
+ SOAPHeader header = (SOAPHeader) obj;
+ setBodyType(header.getUse(), bEntry, operation, input);
+
+ // Note, this only works for explicit headers - those whose
+ // parts come from messages used in the portType's operation
+ // input/output clauses - it does not work for implicit
+ // headers - those whose parts come from messages not used in
+ // the portType-s operation's input/output clauses.
+ bEntry.setHeaderParameter(operation.getName(), header.getPart(),
+ true);
+ }
+ else if (obj instanceof MIMEMultipartRelated) {
+ bEntry.setBodyType(operation,
+ addMIMETypes(bEntry, (MIMEMultipartRelated) obj,
+ operation), input);
+ }
+ }
+ } // fillInBindingInfo
+
+ /**
+ * Set the body type.
+ */
+ private void setBodyType(String use, BindingEntry bEntry,
+ Operation operation, boolean input) throws IOException {
+ if (use == null) {
+ throw new IOException(Messages.getMessage(
+ "noUse", operation.getName()));
+ }
+ if (use.equalsIgnoreCase("literal")) {
+ bEntry.setBodyType(operation, BindingEntry.USE_LITERAL,
+ input);
+ }
+ } // setBodyType
+
+ /**
+ * Add the parts that are really MIME types as MIME types.
+ * A side effect is to return the body Type of the given
+ * MIMEMultipartRelated object.
*/
- private Map collectMIMETypes(MIMEMultipartRelated mpr, IntHolder bodyType,
- BindingOperation bindOp) throws IOException {
- HashMap mimeTypes = new HashMap();
+ private int addMIMETypes(BindingEntry bEntry, MIMEMultipartRelated mpr,
+ Operation op) throws IOException {
+ int bodyType = BindingEntry.USE_ENCODED;
List parts = mpr.getMIMEParts();
Iterator i = parts.iterator();
while (i.hasNext()) {
@@ -1670,22 +1699,22 @@
Object obj = j.next();
if (obj instanceof MIMEContent) {
MIMEContent content = (MIMEContent) obj;
- mimeTypes.put(content.getPart(), content.getType());
+ bEntry.setMIMEType(op.getName(), content.getPart(),
content.getType());
}
else if (obj instanceof SOAPBody) {
String use = ((SOAPBody) obj).getUse();
if (use == null) {
throw new IOException(Messages.getMessage(
- "noUse", bindOp.getName()));
+ "noUse", op.getName()));
}
if (use.equalsIgnoreCase("literal")) {
- bodyType.value = BindingEntry.USE_LITERAL;
+ bodyType = BindingEntry.USE_LITERAL;
}
}
}
}
- return mimeTypes;
- } // collectMIMETypes
+ return bodyType;
+ } // addMIMETypes
/**
* Populate the symbol table with all of the ServiceEntry's from the Definition.
No revision
No revision
1.30.2.1 +1 -1 xml-axis/java/xmls/properties.xml
Index: properties.xml
===================================================================
RCS file: /home/cvs/xml-axis/java/xmls/properties.xml,v
retrieving revision 1.30
retrieving revision 1.30.2.1
diff -u -r1.30 -r1.30.2.1
--- properties.xml 25 Sep 2002 19:04:00 -0000 1.30
+++ properties.xml 8 Oct 2002 01:31:21 -0000 1.30.2.1
@@ -12,7 +12,7 @@
<property file="${axis.home}/build.properties"/>
<property file="${user.home}/build.properties"/>
-<property name="axis.version" value="1.0rc2" />
+<property name="axis.version" value="1.0" />
<property name="name" value="axis" />
<property name="Name" value="Axis" />
<property name="year" value="2002" />