Подтвердить что ты не робот

Сервер 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-клиентах.

4b9b3361

Ответ 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. Подробнее см. эту ссылку. Ссылки с первой страницы помогают понять как простой веб-сервер (т.е. Тот, который обслуживает статические страницы, хотя я полностью осведомлен о "простой" - это ужасно неопределенный термин для веб-серверов) и веб-сервер, который помогает вам развертывать веб-сервер услуги.