【问题标题】:Creating a Simple JAX-WS WebService in Eclipse在 Eclipse 中创建一个简单的 JAX-WS WebService
【发布时间】:2012-03-16 03:35:45
【问题描述】:

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

  1. Greeting.java
package com.alfaisaliah;

import javax.jws.WebService;
import javax.jws.WebMethod;

@WebService
public interface Greeting {
    @WebMethod
    String sayHello(String name);
}
  1. GreetingImp.java
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
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

感谢你们的帮助:)

【问题讨论】:

  • 关于创建 wrapper beans 的消息是 OK 的。它基本上是 JAX-WS 动态生成 W​​SDL 能力的一部分。

标签: java eclipse web-services jax-ws


【解决方案1】:

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

您不需要使用此代码的服务器。
您的main 在:

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

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

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

在这里查看:JAX WS tutorial for
wsgen -d build -s build -classpath build helloservice.endpoint.Hello
并阅读wsgen

老实说,我不记得你是如何通过 Eclipse 做到的(实际上我不确定这是否可以在 Eclipse 中自动工作,而 需要运行 @ 987654327@你自己),但您可以手动运行它,只需将生成的工件复制到您的项目中。

至于

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

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

【讨论】:

  • 感谢您清除此问题。现在我知道问题不在于代码或服务器。我查看了 wsgen 命令工具,了解了大部分选项和参数;但是,当我 cd 进入项目文件夹和 wsgen 时,它说 SEI 丢失了!!!我不确定是否应该 cd 进入项目的 src 文件夹或 bin 文件夹然后应用 wsgen?那里的大多数教程都没有指定,它们只是使用命令和选项。谢谢
  • OK...我发现了如何使用 wsgen 生成工件和 wsdl...我还将端口更改为 8088。我应该将这些文件放在项目层次结构中的什么位置?跨度>
  • 各自对应的包下
【解决方案2】:

查看此链接,

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

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

您从 POJO 开始,不需要注释,JAX-WS 运行时将在 Tomcat 服务器上部署后负责。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2015-11-12
    • 1970-01-01
    相关资源
    最近更新 更多