Procesowy serwer usług SOAP dla Javy

Ok, rozwijam program, który zostanie wdrożony na wielu maszynach (Windows, Linux, AIX,z / Linux, openVMS, itp.). Chcę, aby ta aplikacja zawierała usługę internetową SOAP, ale nie chcę wiązać tomcat ani uruchamiać oddzielnej usługi dla usług (chcę, aby były one w tym samym procesie, co reszta aplikacji).

Zasadniczo to, czego szukam, to coś, w czym mogę zdefiniować klasę (powiedzmy WebServices). Jestem w porządku z pisaniem WSDL lub jakiegokolwiek innego rodzaju opisu usługi, jak również. Chcę coś takiego:

SOAPServer server = makeMeASoapServer();
//do config on the server
server.add(new WebService(...));
server.listen(port);

Oczywiście nazwy i parametry będą różne.

Patrzyłem na Axis i wygląda na to, że zapewnia to, ale nie wiem, jakich klas muszę użyć. Czy jestem szalony, pragnąc takiego zachowania? Nie mogę uwierzyć, że więcej osób tego nie szuka, robię to cały czas z wbudowanymi usługami sieciowymi w klientach. NET.

Author: tster, 2009-11-24

4 answers

Wydaje się, że jdk 6.0 jest już wyposażony w implementację jax-ws i mały serwer, który można osadzić. Nie rozgryzłem wszystkich kawałków ale tu jest początek:

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/endpoint / 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);
    }
}

Zbuduj rzecz:

mkdir build
javac -d build helloservice/endpoint/*java
$JAVA_HOME/wsgen -d build -s build -classpath .  helloservice.endpoint.Hello

Uruchom rzecz:

java -cp  build helloservice.endpoint.Server

Somethings running on http://localhost:9000/SoapContext/SoapPort teraz. Możesz dostać wsdl na http://localhost:9000/SoapContext/SoapPort?WSDL

Nie zdążyłem jeszcze zdobyć klienta..
 22
Author: nos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 21:42:39

Oprócz świetnej odpowiedzi nos, znalazłem klasę w osi Apache o nazwie SimpleHTTPServer która jestem prawie pewien, że robi to samo, ale wymaga tylko Java 1.5 dla tych z Was, którzy utknęli z 1.5

Nie zamierzam tego badać, ponieważ zamierzam użyć innego rozwiązania, więc właściwie nie zweryfikowałem, że robi to, co myślę, że robi, ale jestem prawie pewien, że tak.

 1
Author: tster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-24 22:09:51

Most (/all?) Implementacje Java SOAP server zapewniają Servlet (podejście javax. xml. ws. Endpoint w innej odpowiedzi wygląda jednak nieco prościej...). Niektóre implementacje SOAP, które można rozważyć to: Apache CXF: cxf.apache.org, Apache Axis2: ws.apache.org/axis2 / lub Spring Web Servies: static.springsource.org/spring-ws/site /

Najpopularniejszym wbudowanym serwerem WWW Javy wydaje się być Jetty , możesz skonfigurować albo programowo (używając zwykłej Javy lub Fasolka wiosenna) lub przy użyciu niestandardowego formatu XML.

 1
Author: Stefan L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-21 08:17:26

Aby bezpośrednio odpowiedzieć na główne pytanie, innym podejściem byłoby przejście z wbudowanym serwerem Jetty. Zobacz ten link Po szczegóły. Linki ze wspomnianej strony pomagają zrozumieć zarówno prosty serwer WWW (tj. taki, który obsługuje statyczne strony; choć jestem w pełni świadomy "prosty" to strasznie niejasny termin wrt Serwery WWW), jak i serwer WWW, który pomaga wdrożyć usługi internetowe.

 0
Author: Sonny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-23 18:11:26