2009-03-18 2 views
0

Я новичок в веб-сервисах с JBoss. Клиент подключается к веб-службе на основе EJB3. С JBoss AS 5 и JDK 6 с использованием JAX-WS. Я застрял со следующим исключением:Java WebServiceException: Неопределенный тип порта с JBoss

Exception in thread "main" javax.xml.ws.WebServiceException: 
Undefined port type: {http://webservice.samples/}HelloRemote 
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:300) 
at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:306) 
at javax.xml.ws.Service.getPort(Service.java:161) 
at samples.client.BeanWSClient.getPort(BeanWSClient.java:44) 
at samples.client.BeanWSClient.main(BeanWSClient.java:35) 

BeanWSClient.java (клиент другой проект, чем EJB3 WS):

package samples.client; 
import java.net.MalformedURLException; 
import java.net.URL; 

import javax.xml.namespace.QName; 
import javax.xml.ws.Service; 
import samples.webservice.HelloRemote; 

public class BeanWSClient { 
    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws Exception { 
     String endpointURI ="http://192.168.22.100:8080/SampleWSEJBProject/HelloWorld?wsdl"; 
     String helloWorld = "Hello world!"; 
     Object retObj = getPort(endpointURI).echo(helloWorld); 
     System.out.println(retObj); 
    } 

    private static HelloRemote getPort(String endpointURI) throws MalformedURLException { 
     QName serviceName = new QName("http://www.openuri.org/2004/04/HelloWorld", "HelloWorldService"); 
     URL wsdlURL = new URL(endpointURI); 
     Service service = Service.create(wsdlURL, serviceName); 
     return service.getPort(HelloRemote.class); 
    } 

HelloRemote.java:

package samples.webservice; 
import javax.jws.WebService; 

@WebService 
//@SOAPBinding(style=SOAPBinding.Style.RPC) 
public interface HelloRemote { 
    public String echo(String input); 
} 

HelloWorld.java :

package samples.webservice; 

import javax.ejb.Remote; 
import javax.ejb.Stateless; 
import javax.jws.WebMethod; 
import javax.jws.WebService; 
import javax.jws.soap.SOAPBinding; 

/** 
* Session Bean implementation class MyBean 
*/ 
@WebService(name = "EndpointInterface", targetNamespace = "http://www.openuri.org/2004/04/HelloWorld", serviceName = "HelloWorldService") 
@SOAPBinding(style = SOAPBinding.Style.RPC) 
@Remote(HelloRemote.class) 
@Stateless 
public class HelloWorld implements HelloRemote { 
    /** 
    * @see Object#Object() 
    */ 
    @WebMethod 
    public String echo(String input) { 
     return input; 
    } 
} 

ответ

-1

Попробуйте использовать этот метод:

//inicia classe 
public void test(){ 
    String url = "http://localhost:8080/soujava_server/HelloWorld?wsdl"; 
    // Create an instance of HttpClient. 
    HttpClient client = new HttpClient(); 

    // Create a method instance. 
    GetMethod method = new GetMethod(url); 

    // Provide custom retry handler is necessary 
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false)); 

    try { 
     // Execute the method. 
     int statusCode = client.executeMethod(method); 

     if (statusCode != HttpStatus.SC_OK) { 
     System.err.println("Method failed: " + method.getStatusLine()); 
     } 

     // Read the response body. 
     byte[] responseBody = method.getResponseBody(); 

     // Deal with the response. 
     // Use caution: ensure correct character encoding and is not binary data 
     System.out.println(new String(responseBody)); 

    } catch (HttpException e) { 
    System.err.println("Fatal protocol violation: " + e.getMessage()); 
    e.printStackTrace(); 
    } catch (IOException e) { 
    System.err.println("Fatal transport error: " + e.getMessage()); 
    e.printStackTrace(); 
    } finally { 
    // Release the connection. 
    method.releaseConnection();  
    }  
} 
0

попробуйте добавить:
-Djava.endorsed.dirs = $ {jbossHome}/Библиотека/одобрила/
как Vm аргумент при выполнении BeanWSClient. (где jbossHome - это, конечно, ваш дом jboss).
проблема была, насколько я помню, jboss перезаписал реализацию WSService на солнце, и вам нужно установить загрузку класса для загрузки реализации jboss до реализации солнца.
потому что реализация солнца в rt.jar вам нужно использовать одобренную lib.

2

Добавить endpointInterface в @WebSevice аннотации, если вы не упомянули интерфейс конечной точки, дайте полное имя порта при использовании метода getPort.

1

В HelloWorld.java, вы должны изменить параметр @WebService аннотацию name = "EndpointInterface" к name = "HelloRemote"

ИЛИ

В BeanWSClient.java, в методе getPort(String endpointURI) заменить

return service.getPort(HelloRemote.class); 

с

QName port_name = new QName("http://www.openuri.org/2004/04/HelloWorld","HelloWorldPort"); 
return service.getPort(port_name, HelloRemote.class); 

 Смежные вопросы

  • Нет связанных вопросов^_^