Java WebServiceException:JBoss未定义端口类型
我不熟悉JBoss的Web服务。客户端正在连接到基于EJB3的Web服务 使用JBossAS5和使用JAX-WS的JDK6。我遇到以下例外情况:Java WebServiceException:JBoss未定义端口类型,java,web-services,jboss,Java,Web Services,Jboss,我不熟悉JBoss的Web服务。客户端正在连接到基于EJB3的Web服务 使用JBossAS5和使用JAX-WS的JDK6。我遇到以下例外情况: Exception in thread "main" javax.xml.ws.WebServiceException: Undefined port type: {http://webservice.samples/}HelloRemote at com.sun.xml.internal.ws.client.WSServiceDelegate.get
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是不同的项目):
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;
}
}
尝试使用以下方法:
//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();
}
}
尝试添加:-Djava.annowed.dirs=${jbossHome}/lib/annowed/
当您执行BeanWSClient时,将其作为vm参数。(jbossHome当然是您的jbossHome)。
问题是,据我回忆,jboss覆盖了WSService的sun实现,您需要设置类加载以在sun实现之前加载jboss实现。
由于sun的实现在rt.jar中,您需要使用认可的库。
在@WebDevice注释中添加endpointInterface,如果您在使用getPort方法时没有提到endpoint interface,请给出完全限定的端口名。在
HelloWorld.java
中,您应该更改name=“endpointInterface”@WebService
注释到name=“HelloRemote”
或
在BeanWSClient.java
的getPort(stringendpointuri)
方法中,替换
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);
QName port_name = new QName("http://www.openuri.org/2004/04/HelloWorld","HelloWorldPort");
return service.getPort(port_name, HelloRemote.class);