Error passing Complex Types as parameters in Web Service
nandant Aug 25, 2008 2:00 AMHi,
I have created a simple Hello World Web Service.
I have created a POJO HelloParam
The method exposed in the web service "sayHello" takes HelloParam object as parameter.
The WSDL is generated and is deployed successfully over JBoss.
But when I run the client, I get the following error:
Exception in thread "main" org.jboss.ws.WSException: Cannot obtain java type mapping for: {http://ejb3webservice.wipro.com/}helloParam
Following are the classes that I have created:
package com.wipro.ejb3webservice; import java.io.Serializable; public class HelloParam implements Serializable{ /** * */ private static final long serialVersionUID = 5446103626304202057L; String firstName; String lastName; /** * @return the firstName */ public String getFirstName() { return firstName; } /** * @param firstName the firstName to set */ public void setFirstName(String firstName) { this.firstName = firstName; } /** * @return the lastName */ public String getLastName() { return lastName; } /** * @param lastName the lastName to set */ public void setLastName(String lastName) { this.lastName = lastName; } /** * @param firstName * @param lastName */ public HelloParam(String firstName, String lastName) { super(); this.firstName = firstName; this.lastName = lastName; } /** * */ public HelloParam() { } }
The interface that is exposed as webservice is :
package com.wipro.ejb3webservice; import java.rmi.Remote; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style = Style.RPC) public interface HelloWorld extends Remote { public void sayHello(HelloParam helloParam); }
And the implementation of the interfaces is:
package com.wipro.ejb3webservice; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @Stateless @Remote(HelloWorld.class) @WebService(name="HelloWorldName" ,serviceName="HelloWorldImplService",endpointInterface = "com.wipro.ejb3webservice.HelloWorld") public class HelloWorldImpl implements HelloWorld { @WebMethod public void sayHello( @WebParam(name="helloParam" ) HelloParam helloParam) { System.out.println("first name" + helloParam.getFirstName()+"last name--"+ helloParam.getLastName()); } }
The WSDL file genereated is:
<?xml version="1.0" encoding="UTF-8"?> <definitions name="HelloWorldImplService" targetNamespace="http://ejb3webservice.wipro.com/" xmlns:tns="http://ejb3webservice.wipro.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <types> <xs:schema targetNamespace="http://ejb3webservice.wipro.com/" version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="helloParam"> <xs:sequence> <xs:element minOccurs="0" name="firstName" type="xs:string"/> <xs:element minOccurs="0" name="lastName" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:schema> </types> <message name="HelloWorld_sayHelloResponse"> </message> <message name="HelloWorld_sayHello"> <part name="arg0" type="tns:helloParam"> </part> </message> <portType name="HelloWorld"> <operation name="sayHello" parameterOrder="arg0"> <input message="tns:HelloWorld_sayHello"> </input> <output message="tns:HelloWorld_sayHelloResponse"> </output> </operation> </portType> <binding name="HelloWorldBinding" type="tns:HelloWorld"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="sayHello"> <soap:operation soapAction=""/> <input> <soap:body use="literal" namespace="http://ejb3webservice.wipro.com/"/> </input> <output> <soap:body use="literal" namespace="http://ejb3webservice.wipro.com/"/> </output> </operation> </binding> <service name="HelloWorldImplService"> <port name="HelloWorldNamePort" binding="tns:HelloWorldBinding"> <soap:address location="http://localhost:8080/Ejb3Webservice/HelloWorldImpl"/> </port> </service> </definitions>
Can any one help me on this issue.
Its very urgent.
Thanks and Regards
-Nandan