Java WebServiceException: неопределенный тип порта с JBoss - PullRequest
1 голос
/ 18 марта 2009

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

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;
    }
}

Ответы [ 4 ]

2 голосов
/ 09 октября 2016

В HelloWorld.java необходимо изменить параметр name = "EndpointInterface" аннотации @WebService на name = "HelloRemote"

OR

В 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);
2 голосов
/ 23 апреля 2013

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

0 голосов
/ 03 ноября 2009

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

0 голосов
/ 09 мая 2009

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

//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();     
    }       
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...