Сервер SOAP-сервера на этапе обработки для Java
ОК, я разрабатываю программу, которая будет развернута на множестве машин (Windows, Linux, AIX, z/Linux, openVMS и т.д.). Я хочу, чтобы это приложение содержало веб-службу SOAP, но я не хочу связывать tomcat или запускать отдельную службу для служб (я хочу, чтобы они были в том же процессе, что и остальная часть приложения).
В основном то, что я ищу, - это то, где я могу определить класс (скажем WebServices
). Я в порядке с написанием WSDL или любого другого описания сервиса. Мне нужно что-то вроде этого:
SOAPServer server = makeMeASoapServer();
//do config on the server
server.add(new WebService(...));
server.listen(port);
Очевидно, что имена и параметры будут разными.
Я смотрел на Axis, и кажется, что он это дает, но я не знаю, какие классы мне нужно использовать. Неужели я схожу с ума от такого поведения? Я не могу поверить, что больше людей не ищут этого, я делаю это все время со встроенными веб-службами в .NET-клиентах.
Ответы
Ответ 1
Похоже, что jdk 6.0 уже поставляется с реализацией jax-ws и небольшим сервером, который вы можете вставлять.
Я не понял все части, но вот начало:
mkdir -p helloservice/endpoint/
helloservice/endpoint/Hello.java:
package helloservice.endpoint;
import javax.jws.WebService;
@WebService()
public class Hello {
private String message = new String("Hello, ");
public void Hello() {}
public String sayHello(String name) {
return message + name + ".";
}
}
HelloService/конечная точка /Server.java:
package helloservice.endpoint;
import javax.xml.ws.Endpoint;
public class Server {
protected Server() throws Exception {
System.out.println("Starting Server");
Object implementor = new Hello();
String address = "http://localhost:9000/SoapContext/SoapPort";
Endpoint.publish(address, implementor);
}
public static void main(String args[]) throws Exception {
new Server();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}
Создайте вещь:
mkdir build
javac -d build helloservice/endpoint/*java
$JAVA_HOME/wsgen -d build -s build -classpath . helloservice.endpoint.Hello
Запустить:
java -cp build helloservice.endpoint.Server
Теперь что-то происходит на http://localhost:9000/SoapContext/SoapPort.
Вы можете получить wsdl на http://localhost:9000/SoapContext/SoapPort?WSDL
Не удалось связаться с клиентом.
Ответ 2
В дополнение к большому ответу nos, я нашел класс на оси Apache под названием SimpleHTTPServer
, который, я уверен, делает то же самое, но требует только Java 1.5 для тех из вас, кто застрял с 1.5
Я не буду исследовать его, так как я собираюсь использовать другое решение, поэтому я на самом деле не проверял, что он делает то, что, как я думаю, он делает, но я уверен, что это так.
Ответ 3
Большинство (/все?) реализаций сервера Java SOAP предоставляют сервлет (подход javax.xml.ws.Endpoint в другом ответе выглядит немного проще, хотя...). Некоторые реализации SOAP вы можете рассмотреть: Apache CXF: cxf.apache.org, Apache Axis2: ws.apache.org/axis2/или Spring Веб-службы: static.springsource.org/spring-ws/site/.
Самый популярный встроенный веб-сервер Java, похоже, Jetty, вы можете configure либо программно (с использованием простой Java или Spring beans), либо используя собственный формат XML.
Ответ 4
Чтобы напрямую обратиться к основному вопросу, другим подходом было бы пойти с встроенным сервером Jetty. Подробнее см. эту ссылку. Ссылки с первой страницы помогают понять как простой веб-сервер (т.е. Тот, который обслуживает статические страницы, хотя я полностью осведомлен о "простой" - это ужасно неопределенный термин для веб-серверов) и веб-сервер, который помогает вам развертывать веб-сервер услуги.