如何创建仅使用java SE支持多个客户端请求的Java Web服务?

时间:2014-06-20 10:42:40

标签: java web-services

我的任务是创建一个接收来自多个客户端的请求的Web服务。我是Web服务的新手,因此我使用了本教程:

http://www.java-forums.org/blogs/web-service/1145-how-create-java-web-service.html

这正是我要找的。没有java ee的Web服务。

最好坚持使用java se,这是一个优先保留的政策。

现在我想更进一步实现该服务,以便它处理来自在共享资源上运行的多个客户端的请求。

理想情况下,我想要这样的事情:

 Client client = new Client();
 client.processRequest(string);

Web服务将按照到达的顺序处理请求。请求将在处理请求时进入,因此它将保留在堆栈中。

问题是我只是不知道如何将响应发送回特定客户端。响应将是一个字符串。我想出的唯一的事情,至少在原则上,是发送一个记住它来自哪里的对象,但这似乎只是Web服务工作。

我搜索了互联网,但没有找到解决方案。

如果可能只使用SE请帮忙。 如果您认为没有EE就不可能这样说,但我非常希望只使用SE的答案

2 个答案:

答案 0 :(得分:0)

我认为您要实现的是异步Web服务。以下链接告诉您如何在Java SE中实现它。

http://java.dzone.com/articles/asynchronous-java-se-web

答案 1 :(得分:0)

您可以使用Java SE中的Endpoint.publish方法执行此操作。首先,您创建一个简单的“端点接口”:

package com.example;

import javax.jws.WebService;

@WebService
public interface ExampleService {
    String getDateTime();
}

然后在实现类中指定该接口。如您所见,这两个类都必须使用@WebService进行注释。

package com.example;

import java.io.IOException;
import java.net.URL;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
import javax.xml.ws.Service;
import javax.xml.namespace.QName;

@WebService(endpointInterface = "com.example.ExampleService",
            serviceName = "ExampleService",
            portName = "timeService",
            targetNamespace = "http://example.com/time")
public class ExampleServiceImpl
implements ExampleService {
    public String getDateTime() {
        return String.format("%tc", System.currentTimeMillis());
    }

    public static void main(String[] args)
    throws IOException {
        // Create server
        Endpoint endpoint =
            Endpoint.publish("http://localhost:8080/example",
                             new ExampleServiceImpl());

        URL wsdl = new URL("http://localhost:8080/example?wsdl");

        // Create client
        Service service = Service.create(wsdl,
            new QName("http://example.com/time", "ExampleService"));
        ExampleService e = service.getPort(ExampleService.class);

        // Test it out
        System.out.println(e.getDateTime());

        endpoint.stop();
    }
}

默认情况下,JAX-WS会将端点接口的所有公共方法视为Web方法(因为这通常是开发人员想要的)。通过将@WebMethod注释仅放在要作为Web服务公开的方法上,可以获得更多控制。

有关所有详细信息,请参阅JAX-WS specification