org.jboss.ws.WSException: Cannot obtain java type mapping fo
tim.cockle Sep 19, 2006 3:25 AMHi 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:
tim@Monkey:~/workspace/TestWSEJB$ ant run-client
Buildfile: build.xml
ejbdoclet:
[ejbdoclet] 0 [main] INFO XDocletMain.start - Running <utilobject/>
[ejbdoclet] 214 [main] INFO XDocletMain.start - Running <localinterface/>
[ejbdoclet] 221 [main] INFO XDocletMain.start - Running <localhomeinterface/>
[ejbdoclet] 225 [main] INFO XDocletMain.start - Running <remoteinterface/>
[ejbdoclet] 229 [main] INFO XDocletMain.start - Running <homeinterface/>
[ejbdoclet] 235 [main] INFO XDocletMain.start - Running <service-endpoint/>
[ejbdoclet] 239 [main] INFO XDocletMain.start - Running <deploymentdescriptor/>
[ejbdoclet] 302 [main] INFO XDocletMain.start - Running <jboss/>
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.<init>(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