Paulo wrote: I have been working quite intensely with J2EE 1.4 web services in the previous weeks. I'm working mostly with JBoss 4.02 and with WebSphere 6. While using rpc/encoded and rpc/literal everything went ok. Everything behaved as expected, and both application servers dealt with my applications in the same way. The problem happened when I started to use document/literal. I know that JBoss has some problems when dealing with document/literal applications. I read several messages in the JBoss forums about this subject. I also read the WSDocServiceStepByStep document. But the reason of me sending this email was not these specific problems but the approach you're taking to fully support document/literal. I think that by presenting an example it will be easier to explain my point. Let's assume I have the following WSDL:
| <wsdl:types> | <xsd1:schema attributeFormDefault="qualified" | elementFormDefault="qualified" | targetNamespace="http://logic.business.application.rootpackage/types" | > | <xsd1:element name="sayHello"> | <xsd1:complexType name="SayHello"> | <xsd1:sequence> | <xsd1:element name="name" type="Level1Struct"/> | </xsd1:sequence> | </xsd1:complexType> | </xsd1:element> | <xsd1:element name="sayHelloResponse"> | <xsd1:complexType name="SayHelloResponse"> | <xsd1:sequence> | <xsd1:element name="sayHelloReturn" type="xsd1:boolean"/> | </xsd1:sequence> | </xsd1:complexType> | </xsd1:element> | <xsd:complexType name="Level1Struct"> <xsd:all> | <xsd:element name="id" type="xsd:string"/> | <xsd:element name="salary" type="xsd:double" nillable="true"/> | <xsd:element name="level2" type=" Level2Struct"/> </xsd:all> | </xsd:complexType> | <xsd:complexType name="Level2Struct"> | <xsd:all> | <xsd:element name="name" type="xsd:string"/> | <xsd:element name="age" type="xsd:string"/> | </xsd:all> | </xsd:complexType> | </xsd1:schema> | </wsdl:types> | <wsdl:message name="sayHelloMessageResponse"> | <wsdl:part name="sayHello" element="xsd:sayHelloResponse"/> | </wsdl:message> | <wsdl:message name="sayHelloMessageRequest"> | <wsdl:part name="sayHello" element="xsd:sayHello"/> | </wsdl:message> | <wsdl:portType name="HelloComponentPortType"> | <wsdl:operation name="sayHello" parameterOrder=""> | <wsdl:input name="sayHelloRequest" | message="tns:sayHelloMessageRequest"/> | <wsdl:output name="sayHelloResponse" | message="tns:sayHelloMessageResponse"/> | </wsdl:operation> | </wsdl:portType> | (...) | Basically I have just one operation that is taking one parameter (a Level1Struct) and returning a double. For the java to xml mappings I provide the following: | <java-xml-type-mapping> | | <java-type>rootpackage.application.business.common.Level1Struct</java-type> | <root-type-qname | xmlns:typeNS="http://common.business.application.rootpackage">typeNS:Level1S | truct</root-type-qname> | <qname-scope>complexType</qname-scope> | <variable-mapping> | <java-variable-name>id</java-variable-name> | <xml-element-name>id</xml-element-name> | </variable-mapping> | <variable-mapping> | <java-variable-name>salary</java-variable-name> | <xml-element-name>salary</xml-element-name> | </variable-mapping> | <variable-mapping> | <java-variable-name>level2</java-variable-name> | <xml-element-name>level2</xml-element-name> | </variable-mapping> | </java-xml-type-mapping> | <java-xml-type-mapping> | | <java-type>rootpackage.application.business.common.Level2Struct</java-type> | <root-type-qname | xmlns:typeNS="http://common.business.application.rootpackage">typeNS:Level2S | truct</root-type-qname> | <qname-scope>complexType</qname-scope> | <variable-mapping> | <java-variable-name>name</java-variable-name> | <xml-element-name>name</xml-element-name> | </variable-mapping> | <variable-mapping> | <java-variable-name>age</java-variable-name> | <xml-element-name>age</xml-element-name> | </variable-mapping> | </java-xml-type-mapping> | As you can see I'm just providing mappings for the root complex types. The specification is not very clear about this. They say "there must be java-xml-type-mapping for every root WSDL type". Although it's not clear I would say that I don't have to provide any mapping for the root elements referenced in the element attribute of the wsdl.part of the request/response. Whenever using document/literal I know that there will be an element that has a complex type, with a sequence, with an element for each parameter. Therefore I would expect the application server to guess this mapping and to do deal with it automatically. And WebSphere 6 works like that. If I provide the wsdl/mapping that I presented above everything will work correctly. If I try to deploy the same application in JBoss I immediately get two warnings alerting me to the fact that I did not specify a mapping for the two elements (sayHello and sayHelloResponse). But, as I explained, I assume that I don't have to provide this mapping. I don't even know how to map it. Both elements have an anonymous complex type, and I have no java class that maps to these complex types. I know that wscompile can generate these classes, but I insist in my point- shouldn't the application server deal with this information automatically? At least that's the way I look at it, that's the way WebSphere works, and although I don't have too much knowledge about Axis, I think it also works like that. Many thanks for your attention! Paulo View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3886902#3886902 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3886902 ------------------------------------------------------- SF.Net email is Sponsored by the Better Software Conference & EXPO September 19-22, 2005 * San Francisco, CA * Development Lifecycle Practices Agile & Plan-Driven Development * Managing Projects & Teams * Testing & QA Security * Process Improvement & Measurement * http://www.sqe.com/bsce5sf _______________________________________________ JBoss-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/jboss-user
