在Eclipse中创建一个简单的JAX-WS WebService

时间:2012-02-26 09:13:12

标签: java eclipse web-services jax-ws

我试图在eclipse中创建一个简单的Web服务。首先,我创建了一个空的java项目,并在src文件夹中添加了以下三个文件

  1. Greeting.java
  2. package com.alfaisaliah;
    
    import javax.jws.WebService;
    import javax.jws.WebMethod;
    
    @WebService
    public interface Greeting {
        @WebMethod
        String sayHello(String name);
    }
    
    1. GreetingImp.java
    2. package com.alfaisaliah;
      
      import javax.jws.WebService;
      
      @WebService(endpointInterface="com.alfaisaliah.Greeting")
      public class GreetingImp implements Greeting {
      
          @Override
          public String sayHello(String name) {
              return "Hello " + name;
          }
      }
      
      1. WSPublisher
      2. package com.alfaisaliah;
        
        import javax.xml.ws.Endpoint;
        
        public class WSPublisher {
            public static void main(String[] args){
                Endpoint.publish("http://localhost:8081/WS/Greeting", new GreetingImp());
            }
        }
        

        我跟随的教程没有指定任何运行Web服务的服务器!我想知道是否需要指定任何服务器。我已经有Tomcat v5.5但是在这个例子中没有使用它。每当我将这个项目作为一个java项目运行时,我都会遇到一些错误。任何人都可以帮我确定我的问题是在尝试运行Web服务。这是eclipse控制台的输出

        Feb 26, 2012 12:01:00 PM com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
        INFO: Dynamically creating request wrapper Class com.alfaisaliah.jaxws.SayHello
        
        Feb 26, 2012 12:01:00 PM com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
        INFO: Dynamically creating response wrapper bean Class com.alfaisaliah.jaxws.SayHelloResponse
        

        此外,当我再次运行该项目时,它表示该地址已在使用中

        Feb 26, 2012 12:01:00 PM com.sun.xml.internal.ws.model.RuntimeModeler getRequestWrapperClass
        INFO: Dynamically creating request wrapper Class com.alfaisaliah.jaxws.SayHello
        
        Feb 26, 2012 12:01:00 PM com.sun.xml.internal.ws.model.RuntimeModeler getResponseWrapperClass
        INFO: Dynamically creating response wrapper bean Class com.alfaisaliah.jaxws.SayHelloResponse
        Exception in thread "main" com.sun.xml.internal.ws.server.ServerRtException: Server Runtime Error: java.net.BindException: Address already in use
        

        我很感激你们的帮助:)

2 个答案:

答案 0 :(得分:4)

  

我正在关注的教程没有指定任何服务器来运行Web   服务上!我想知道是否需要指定任何服务器。

您不需要具有此代码的服务器 您的main

Endpoint.publish("http://localhost:8081/WS/Greeting", new GreetingImp());  

启动一个轻型http服务器(在JKD 1.6之后可用)并部署您的Web服务来处理所有传入/传出流量。

这里的问题是你错过了一个步骤:
您必须使用wsgen工具(在java中提供)生成所需的工件。

点击此处:JAX WS tutorial代表 wsgen -d build -s build -classpath build helloservice.endpoint.Hello
并阅读wsgen

说实话,我不记得你是怎么通过Eclipse做的(实际上我不确定这是否可以在Eclipse 中自动,而需要运行{ {1}}你自己)但你可以手动运行它,只需复制项目中生成的工件。

至于

  

服务器运行时错误:java.net.BindException:已在使用的地址

这是不言自明的:只需使用另一个端口。已经使用了8081.

答案 1 :(得分:2)

检查此链接,

http://www.myeclipseide.com/documentation/quickstarts/webservices_jaxws/

以上链接提供了生成Web服务服务器和客户端的分步详细信息。

从POJO开始,不需要注释,JAX-WS运行时在Tomcat服务器上部署后会很小心。