[jboss-user] [JBossWS] - org.jboss.ws.WSException: Cannot obtain java type mapping fo

tim.cockle do-not-reply at jboss.com
Tue Sep 19 03:25:24 EDT 2006


Hi  All,

I hope you can help me as I have been knocking me head against a wall for a couple of days now. I can seem to get a simple hello service working for document/literal. 

The problem is this I have a simple SLSB which I am using as a web service:


  | package myejbws;
  | 
  | import java.rmi.RemoteException;
  | 
  | import javax.ejb.EJBException;
  | import javax.ejb.SessionBean;
  | import javax.ejb.SessionContext;
  | 
  | import javax.ejb.CreateException;
  | 
  | /**
  |  * @ejb.bean name="Hello"
  |  *           display-name="Name for Hello"
  |  *           description="Description for Hello"
  |  *           jndi-name="ejb/Hello"
  |  *           type="Stateless"
  |  *           view-type="all"
  |  *                       
  |  */
  | public class HelloBean implements SessionBean {
  | 
  |     public void setSessionContext(SessionContext ctx)
  |         throws EJBException,
  |         RemoteException {
  |         System.out.println("HelloBean.setSessionContext");
  |     }
  | 
  |     public void ejbRemove() throws EJBException, RemoteException {
  |         System.out.println("HelloBean.ejbRemove");
  | 
  |     }
  | 
  |     public void ejbActivate() throws EJBException, RemoteException {
  |         System.out.println("HelloBean.ejbActivate");
  | 
  |     }
  | 
  |     public void ejbPassivate() throws EJBException, RemoteException {
  |         System.out.println("HelloBean.ejbPassivate");
  | 
  |     }
  | 
  |     /**
  |      * Default create method
  |      * 
  |      * @throws CreateException
  |      * @ejb.create-method
  |      */
  |     public void ejbCreate() throws CreateException {
  |         System.out.println("HelloBean.ejbCreate");
  |     }
  |     
  |     /**
  |      * 
  |      * @ejb.interface-method view-type="all"
  |      * @param name
  |      * @return
  |      * @throws EJBException
  |      * @throws RemoteException
  |      */
  |     public String sayHello(String name) {
  |         System.out.println("HelloBean.sayHello("+name+")");
  |         return "Hello " +name+" from HelloBean";
  |     }
  | 

I have used the SWTool with the following config:

  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  | <configuration xmlns="www.aware-services.co.uk/ws"> 
  | 	<java-wsdl>
  | 		<service name="HelloService"
  | 				 style="document"
  | 				 endpoint="myejbws.HelloEndpoint"/>
  | 		<namespaces target-namespace="www.aware-services.co.uk/ws/hello"
  | 					type-namespace="www.aware-services.co.uk/ws/hello/types"/>
  | 		<mapping files="jaxrpc-mapping.xml"/>
  | 		<webservices ejb-link="Hello"/>
  | 	</java-wsdl> 
  | </configuration>
  | 
If I set the style to rpc all deploys fine and the client works as well.
However when I change the style to document, create and compile the additional class created by the WSTool, it deploys but I get the following error from the client:
anonymous wrote : 
  | tim at Monkey:~/workspace/TestWSEJB$ ant run-client
  | Buildfile: build.xml
  | 
  | ejbdoclet:
  | [ejbdoclet] 0 [main] INFO XDocletMain.start  - Running 
  | [ejbdoclet] 214 [main] INFO XDocletMain.start  - Running 
  | [ejbdoclet] 221 [main] INFO XDocletMain.start  - Running 
  | [ejbdoclet] 225 [main] INFO XDocletMain.start  - Running 
  | [ejbdoclet] 229 [main] INFO XDocletMain.start  - Running 
  | [ejbdoclet] 235 [main] INFO XDocletMain.start  - Running <service-endpoint/>
  | [ejbdoclet] 239 [main] INFO XDocletMain.start  - Running 
  | [ejbdoclet] 302 [main] INFO XDocletMain.start  - Running 
  | 
  | compile:
  | 
  | run-client:
  |      [java] Welcome
  |      [java] Contacting webservice at http://Monkey:8080/hello/Hello?wsdl
  |      [java] set up service...
  |      [java] log4j:WARN No appenders could be found for logger (org.jboss.ws.metadata.JSR109ClientMetaDataBuilder).
  |      [java] log4j:WARN Please initialize the log4j system properly.
  |      [java] org.jboss.ws.WSException: Cannot obtain java type mapping for: {www.aware-services.co.uk/ws/hello/types}sayHello
  |      [java]     at org.jboss.ws.metadata.JSR109MetaDataBuilder.buildParameterMetaDataDoc(JSR109MetaDataBuilder.java:442)
  |      [java]     at org.jboss.ws.metadata.JSR109MetaDataBuilder.setupOperationsFromWSDL(JSR109MetaDataBuilder.java:193)
  |      [java]     at org.jboss.ws.metadata.JSR109ClientMetaDataBuilder.buildMetaDataInternal(JSR109ClientMetaDataBuilder.java:207)
  |      [java]     at org.jboss.ws.metadata.JSR109ClientMetaDataBuilder.buildMetaData(JSR109ClientMetaDataBuilder.java:122)
  |      [java]     at org.jboss.ws.metadata.JSR109ClientMetaDataBuilder.buildMetaData(JSR109ClientMetaDataBuilder.java:78)
  |      [java]     at org.jboss.ws.jaxrpc.ServiceImpl.(ServiceImpl.java:96)
  |      [java]     at org.jboss.ws.jaxrpc.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:157)
  |      [java]     at org.jboss.ws.jaxrpc.ServiceFactoryImpl.createService(ServiceFactoryImpl.java:128)
  |      [java]     at myclient.HelloWsEjbClient.main(Unknown Source)
  | 
  | BUILD SUCCESSFUL
  | Total time: 4 seconds
  | 
I have looked in the WSDL and the mappings files and they look fine. The WSDL is as follows:

  | 
  | <definitions name="HelloService" targetNamespace="www.aware-services.co.uk/ws/hello">
  | 
  | 	<types>
  | 
  | 	<schema targetNamespace="www.aware-services.co.uk/ws/hello/types">
  | 
  | 	<complexType name="sayHello">
  | 
  | 	<sequence>
  | <element name="String_1" nillable="true" type="string"/>
  | </sequence>
  | </complexType>
  | 
  | 	<complexType name="sayHelloResponse">
  | 
  | 	<sequence>
  | <element name="result" nillable="true" type="string"/>
  | </sequence>
  | </complexType>
  | <element name="sayHello" type="tns:sayHello"/>
  | <element name="sayHelloResponse" type="tns:sayHelloResponse"/>
  | </schema>
  | </types>
  | 
  | 	<message name="HelloEndpoint_sayHello">
  | <part element="ns1:sayHello" name="parameters"/>
  | </message>
  | 
  | 	<message name="HelloEndpoint_sayHelloResponse">
  | <part element="ns1:sayHelloResponse" name="result"/>
  | </message>
  | 
  | 	<portType name="HelloEndpoint">
  | 
  | 	<operation name="sayHello">
  | <input message="tns:HelloEndpoint_sayHello"/>
  | <output message="tns:HelloEndpoint_sayHelloResponse"/>
  | </operation>
  | </portType>
  | 
  | 	<binding name="HelloEndpointBinding" type="tns:HelloEndpoint">
  | <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  | 
  | 	<operation name="sayHello">
  | <soap:operation soapAction=""/>
  | 
  | 	<input>
  | <soap:body use="literal"/>
  | </input>
  | 
  | 	<output>
  | <soap:body use="literal"/>
  | </output>
  | </operation>
  | </binding>
  | 
  | 	<service name="HelloService">
  | 
  | 	<port binding="tns:HelloEndpointBinding" name="HelloEndpointPort">
  | <soap:address location="http://Monkey:8080/hello/Hello"/>
  | </port>
  | </service>
  | </definitions>
  | 

The same thing happens if you use RPC but I pass back a  non standard class (such as MyDataObject).

HeLp!!!! (Please)

Tim

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

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



More information about the jboss-user mailing list