我正在尝试在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
。谁能告诉我我错过了什么?我不想为此使用任何外部库。
答案 0 :(得分:0)
您没有写出导致ERR_EMPTY_RESPONSE
错误的确切网址,但您说您的wsdl
正在运行,因此您的WS应该正常工作。
您有一个SOAP WebService,因此您可以使用soapui或postman(另请参阅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包名称。