WSDL service builder fails to see service definition when it comes from an
import
---------------------------------------------------------------------------------
Key: AXIS2-829
URL: http://issues.apache.org/jira/browse/AXIS2-829
Project: Apache Axis 2.0 (Axis2)
Type: Bug
Components: core
Versions: 1.0
Reporter: Marc Gagnon
When the service element of a WSDL is not in the first level file, there is an
exception like this:
[java] Exception in thread "main"
org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
[java] at
org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:94)
[java] at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:32)
[java] at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:21)
[java] Caused by: org.apache.axis2.AxisFault: No service element found in
the WSDL; nested exception is:
[java] org.apache.axis2.AxisFault: No service element found in the WSDL
[java] at
org.apache.axis2.description.WSDL2AxisServiceBuilder.populateService(WSDL2AxisServiceBuilder.java:243)
[java] at
org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:87)
I am pretty sure the spec allows services definitions to be imported.
The book from which I am learning web services has a specific example using
this way of organizing WSDL (J2EE Web Services by Richard Monson-Haefel, page
136 : 5.2.4).
So, assuming service definitions of imported WSDL should be visible, here is my
patch:
The reason for this problem is that the code in WSDL2AxisServiceBuilder method
processImports does not recursively include the services in the current level's
hash map:
...
//add messages
Map messagesMap = importedDef.getMessages();
wsdl4JDefinition.getMessages().putAll(messagesMap);
//add portypes
Map porttypeMap = importedDef.getPortTypes();
wsdl4JDefinition.getPortTypes().putAll(porttypeMap);
//add bindings
Map bindingMap = importedDef.getBindings();
wsdl4JDefinition.getBindings().putAll(bindingMap);
//------------------------------------------------------------------------------------------------
// Must add services of imported definitions into current wsdl definitions.
//-------------------------------------------------------------------------------------------------
}
...
I simply added:
//add services
Map serviceMap =
importedDef.getServices();
wsdl4JDefinition.getServices().putAll(serviceMap);
And it worked.
I tested this using on the refactored version: WSDL11ToAxisServiceBuilder
Here is the patch:
Index: WSDL11ToAxisServiceBuilder.java
===================================================================
--- WSDL11ToAxisServiceBuilder.java (revision 415081)
+++ WSDL11ToAxisServiceBuilder.java (working copy)
@@ -916,6 +916,9 @@
Map bindingMap = importedDef.getBindings();
wsdl4JDefinition.getBindings().putAll(bindingMap);
+ //add services
+ Map serviceMap = importedDef.getServices();
+
wsdl4JDefinition.getServices().putAll(serviceMap);
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]