3 Replies Latest reply on Jul 13, 2006 3:10 PM by Heiko Braun

    problem on invoking WS

    a a Newbie

      I have written a WebService on JBoss 4.0.4 GA (jboss-EJB-3.0_RC8-FD + jbossws-1.0.1.GA)

      package webservices;
      
      import java.rmi.Remote;
      
      public interface SimpleService extends Remote {
       String echo(String echo);
      }
      


      package webservices;
      
      import javax.ejb.Remote;
      import javax.ejb.Stateless;
      import javax.jws.WebMethod;
      import javax.jws.WebService;
      
      import org.jboss.ws.annotation.PortComponent;
      
      @WebService(name="EndpointInterface", targetNamespace="http://localhost", serviceName="SimpleService")
      @PortComponent(contextRoot="/jbosswstest", urlPattern="/*")
      @Remote(SimpleService.class)
      @Stateless
      public class SimpleServiceImpl implements SimpleService {
       @WebMethod
       public String echo(String input) {
       return input;
       }
      }
      


      After deploy it to JBoss, I got a auto-generated WSDL as follow:
      <definitions name='SimpleService' targetNamespace='http://localhost' xmlns='http://schemas.xmlsoap.org/wsdl/' xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' xmlns:tns='http://localhost' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>
       <types>
       <schema elementFormDefault='qualified' targetNamespace='http://localhost' xmlns='http://www.w3.org/2001/XMLSchema' xmlns:soap11-enc='http://schemas.xmlsoap.org/soap/encoding/' xmlns:tns='http://localhost' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
       <complexType name='echo'>
       <sequence>
       <element name='String_1' nillable='true' type='string'/>
       </sequence>
       </complexType>
       <complexType name='echoResponse'>
       <sequence>
       <element name='result' nillable='true' type='string'/>
       </sequence>
       </complexType>
       <element name='echo' type='tns:echo'/>
       <element name='echoResponse' type='tns:echoResponse'/>
       </schema>
       </types>
       <message name='EndpointInterface_echo'>
       <part element='tns:echo' name='parameters'/>
       </message>
       <message name='EndpointInterface_echoResponse'>
       <part element='tns:echoResponse' name='result'/>
       </message>
       <portType name='EndpointInterface'>
       <operation name='echo'>
       <input message='tns:EndpointInterface_echo'/>
       <output message='tns:EndpointInterface_echoResponse'/>
       </operation>
       </portType>
       <binding name='EndpointInterfaceBinding' type='tns:EndpointInterface'>
       <soap:binding style='document' transport='http://schemas.xmlsoap.org/soap/http'/>
       <operation name='echo'>
       <soap:operation soapAction=''/>
       <input>
       <soap:body use='literal'/>
       </input>
       <output>
       <soap:body use='literal'/>
       </output>
       </operation>
       </binding>
       <service name='SimpleService'>
       <port binding='tns:EndpointInterfaceBinding' name='EndpointInterfacePort'>
       <soap:address location='http://ibm-t40:8080/jbosswstest'/>
       </port>
       </service>
      </definitions>
      


      Then I try to code a client to invoke the webservice:
      package client;
      
      import java.net.URL;
      
      import javax.xml.namespace.QName;
      import javax.xml.rpc.Service;
      import javax.xml.rpc.ServiceFactory;
      
      import webservices.SimpleService;
      
      public class SimpleServiceClient {
       private static final String _namespace = "http://localhost";
      
       private static final String _service = "SimpleService";
      
       private static final String _wsdl = "http://localhost:8080/jbosswstest?wsdl";
      
       public static void main(String[] args) {
       try {
       URL defUrl = new URL(_wsdl);
       // Create the service factory
       ServiceFactory serviceFactory = ServiceFactory.newInstance();
       // Load the service implementation class
       Service remoteService = serviceFactory.createService(defUrl,
       new QName(_namespace, _service));
       // Load a proxy for our class
       SimpleService invoker = (SimpleService) remoteService
       .getPort(SimpleService.class);
       // Invoke our interface for each argument
       for (int i = 0; i < args.length; i++) {
       String returnedString = invoker.echo(args);
       System.out.println("sent string: " + args
       + ", received string: " + returnedString);
       }
       } catch (Exception e) {
       e.printStackTrace();
       }
       }
      }
      


      Here comes the problem ->
      org.jboss.ws.WSException: Cannot obtain java type mapping for: {http://localhost}echo
      at org.jboss.ws.deployment.JSR109MetaDataBuilder.buildParameterMetaDataDoc(JSR109MetaDataBuilder.java:450)
      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.SimpleServiceClient.main(SimpleServiceClient.java:24)

      Could somebody give me a idea what's wrong, thanks.