[jboss-user] [JBossWS] - Writing WS client returning complex object

andrea.le do-not-reply at jboss.com
Tue Jul 3 05:53:03 EDT 2007


Hi this is my problem, i hope someone help me...

i'm trying to deploy a simple web service that returns a complex Object.

The class that I want to return is:
package esempio;
  | 
  | public class TestClass {
  | 	private String name;
  | 	public TestClass() {
  | 	}
  | 
  | 	public String getName() {
  | 		return name;
  | 	}
  | 	public void setName(String name) {
  | 		System.out.println("settato il nome: "+name);
  | 		this.name = name;
  | 	}
  | }
  | 

and this is the service class I wrote:

package esempio;
  | 
  | import javax.ejb.Stateless;
  | import javax.jws.WebMethod;
  | import javax.jws.WebParam;
  | import javax.jws.WebResult;
  | import javax.jws.WebService;
  | import javax.jws.soap.SOAPBinding;
  | 
  | @WebService(targetNamespace="urn:testws")
  | @SOAPBinding(style= SOAPBinding.Style.DOCUMENT)
  | @Stateless(name="provaServizio")
  | public class ProvaServizioImpl  {
  | 	@WebMethod
  | 	@WebResult(name="testClassResult")
  | 	public TestClass getTestClass(
  | 			@WebParam(name = "nome") String name) {
  | 		TestClass ritorno = new TestClass();
  | 		ritorno.setName(name);
  | 		return ritorno;
  | 	}
  | }
  | 
I packaged this two classe in a jar that I named "ws2.jar" and copied this jar in jboss 4.05GA server/default/deploy folder.

The service seems deployed, because if put the address "localhost:8080/ws2/provaServizio?wsdl" on a browser it returns this WSDL:

<definitions name="ProvaServizioImplService" targetNamespace="urn:testws">
  | 	<types>
  | 	<schema elementFormDefault="qualified" targetNamespace="http://esempio/jaws">
  | <import namespace="urn:testws"/>
  | 	<complexType name="TestClass">
  | 	<sequence>
  | <element name="name" nillable="true" type="string"/>
  | </sequence>
  | </complexType>
  | </schema>
  | 	<schema elementFormDefault="qualified" targetNamespace="urn:testws">
  | <import namespace="http://esempio/jaws"/>
  | 	<complexType name="getTestClass">
  | 	<sequence>
  | <element name="nome" nillable="true" type="string"/>
  | </sequence>
  | </complexType>
  | 	<complexType name="getTestClassResponse">
  | 	<sequence>
  | <element name="testClassResult" nillable="true" type="ns2:TestClass"/>
  | </sequence>
  | </complexType>
  | <element name="getTestClass" type="tns:getTestClass"/>
  | <element name="getTestClassResponse" type="tns:getTestClassResponse"/>
  | </schema>
  | </types>
  | 	<message name="ProvaServizioImpl_getTestClass">
  | <part element="tns:getTestClass" name="parameters"/>
  | </message>
  | 	<message name="ProvaServizioImpl_getTestClassResponse">
  | <part element="tns:getTestClassResponse" name="result"/>
  | </message>
  | 	<portType name="ProvaServizioImpl">
  | 	<operation name="getTestClass">
  | <input message="tns:ProvaServizioImpl_getTestClass"/>
  | <output message="tns:ProvaServizioImpl_getTestClassResponse"/>
  | </operation>
  | </portType>
  | 	<binding name="ProvaServizioImplBinding" type="tns:ProvaServizioImpl">
  | <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  | 	<operation name="getTestClass">
  | <soap:operation soapAction=""/>
  | 	<input>
  | <soap:body use="literal"/>
  | </input>
  | 	<output>
  | <soap:body use="literal"/>
  | </output>
  | </operation>
  | </binding>
  | 	<service name="ProvaServizioImplService">
  | 	<port binding="tns:ProvaServizioImplBinding" name="ProvaServizioImplPort">
  | <soap:address location="http://sviluppo-012:8080/ws2/provaServizio"/>
  | </port>
  | </service>
  | </definitions>
  | 

So I think the service is working.

Then I wrote this simple Client, including in its classpath the jar containing the TestClass file:

import java.net.URL;
  | 
  | import javax.naming.Context;
  | import javax.xml.namespace.QName;
  | import javax.xml.rpc.Service;
  | import javax.xml.rpc.ServiceFactory;
  | import esempio.ProvaServizioImpl;
  | import esempio.TestClass;
  | 
  | public class Client {
  |     public static void main(String[] args) throws Exception {
  | 
  |     	System.out.println("Start"); 
  |     		
  |     	ServiceFactory factory= ServiceFactory.newInstance();
  |     	
  |     	Service factoryTest = factory.createService(new URL("http://localhost:8080/ws2/provaServizio?wsdl"),
  |     			new QName("http://esempio/jaws", "ProvaServizioImplService"));
  |     	ProvaServizioImpl proxyTest  = (ProvaServizioImpl)factoryTest.getPort(ProvaServizioImpl.class);
  |     
  |     	TestClass ritorno = (TestClass)proxyTest.getTestClass("test");
  |     	
  |     	System.out.println("ritorno del secondo servizio "+ritorno.getName());
  |     }
  | }
  | 

Running the Client it returns this error:
"
Exception in thread "main" org.jboss.ws.WSException: Cannot obtain java type mapping for: {urn:testws}getTestClass
	at org.jboss.ws.deployment.JSR109MetaDataBuilder.buildParameterMetaDataDoc(JSR109MetaDataBuilder.java:451)
	at org.jboss.ws.deployment.JSR109MetaDataBuilder.setupOperationsFromWSDL(JSR109MetaDataBuilder.java:200)
	at org.jboss.ws.deployment.JSR109ClientMetaDataBuilder.buildMetaDataInternal(JSR109ClientMetaDataBuilder.java:208)
	at org.jboss.ws.deployment.JSR109ClientMetaDataBuilder.buildMetaData(JSR109ClientMetaDataBuilder.java:126)
	at org.jboss.ws.deployment.JSR109ClientMetaDataBuilder.buildMetaData(JSR109ClientMetaDataBuilder.java:82)
	at org.jboss.ws.jaxrpc.ServiceImpl.(ServiceImpl.java:96)
	at org.jboss.ws.jaxrpc.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:157)
	at org.jboss.ws.jaxrpc.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:128)
	at Client.main(Client.java:19)
"

Now i know that there is error in mapping but i dont know if i wrong something in client or if i need some kind of configuration file(xml).

I read thousands over thousands of examples about WS and clients, but I'm confused... using EJB3 i must generate some mapping file?
In which way?
I read examples that just return primitives types, but never complex Object types...

Can u help me pls?

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4059850#4059850

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4059850



More information about the jboss-user mailing list