Java SE 8:最小JSON Web服务

时间:2017-08-17 08:56:30

标签: java json web-services

我正在尝试在Java 8中创建一个最小的JSON Web服务。这就是我尝试这样做的方式:

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class DemoHttpServer {

    @WebMethod
    public double square(double num) {
        return num * num;
    }

    public static void main(String[] args) throws InterruptedException {
        String address = "http://192.168.2.66:8080/demo";
        Endpoint.publish(address, new DemoHttpServer());

        System.out.println("Service running at " + address);
        System.out.println("Type Ctrl+c to exit");

        Thread.sleep(Long.MAX_VALUE);
    }

}

但是,当我点击浏览器中的网址时,我得到ERR_EMPTY_RESPONSE。谁能告诉我我错过了什么?我不想为此使用任何外部库。

1 个答案:

答案 0 :(得分:0)

您没有写出导致ERR_EMPTY_RESPONSE错误的确切网址,但您说您的wsdl正在运行,因此您的WS应该正常工作。

您有一个SOAP WebService,因此您可以使用soapuipostman(另请参阅here)来调用您的服务(位于http://192.168.2.66:8080/demo/DemoHttpServerService

您还可以从WSDL生成JAX-WS java客户端。例如,在Eclipse中有一个工具。对于WS的真正Java使用,你应该使用它或类似的东西。

最后,您可以编写一个简单的程序来调用您的服务,仅用于测试(改编自here):

package another;

import javax.jws.WebService;

@WebService
public interface IWebServiceTest {
    double square(double num);
}

package another;

import java.net.URL;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class Main {
    public static void main(String[] args) throws Exception {
        String url = "http://192.168.2.66:8080/demo/DemoHttpServerService?wsdl";
        String namespace = "http://another/";
        QName serviceQN = new QName(namespace, "DemoHttpServerService");
        Service service = Service.create(new URL(url), serviceQN);

        String portName = "DemoHttpServerPort";
        QName portQN = new QName(namespace, portName);

        IWebServiceTest sample = service.getPort(portQN, IWebServiceTest.class);
        double result = sample.square(3);
        System.out.println(result);
    }
}

在项目中尝试时,请注意java包名称。