2016-04-18 17 views
1

Ok, also hier ist etwas, wofür ich stundenlang gegoogelt habe, ohne Erfolg ... Endlich kann ich nur hoffen, dass ein Frühlingsmagier diese Frage liest und beantwortet. :)Java-Config Gegenstück von wss: verbindlich?

Ich aktualisiere eine alte Web-Anwendung (Spring 2.x-basiert) zu Spring 4.2.x und während ich neue Funktionen hinzufüge, habe ich beschlossen, komplett weg von XML-basierten Config. (Nochmals: Ich möchte keine Spring XML-Dateien im Projekt haben!)

Ich habe so ziemlich alles konvertiert, aber das letzte, was ich nicht lösen kann, ist das richtige Java-Config-Pendant zu finden von:

<ws:service id="MySoapService" bean="#ServiceImpl" /> 
<wss:binding service="#MySoapService" url="/1.0/soap" /> 

ws/WSS Namespaces stammen aus:

xmlns:ws="http://jax-ws.dev.java.net/spring/core" 
xmlns:wss="http://jax-ws.dev.java.net/spring/servlet" 

Also, was ich versuche @WebService kommentierten Klassen zu tun exportiert, aber mit Java-config statt XML.

Zusätzliche Infos:

  • Ich habe versucht, SimpleJaxWsServiceExporter verwenden, sondern dass man läßt mich mit einem "java.net.BindException: Adresse bereits in Gebrauch: bind", unabhängig davon, welchen Port ich bin

  • Die Anwendung verfügt über zwei Servlets: einer ist ein normaler Spring MVC Dispatcher für die neue REST-API und ein weiterer com.sun.xml.ws.transport.http.servlet.WSSpringServlet, der den oben genannten JAX-WS-Dienst verfügbar machen soll.

  • Ich versuche, Dinge mit reinem JAX-WS RI, keine CXF oder andere Bibliothek zu lösen. Die Anwendung ist sehr groß genug schon ... :(

Antwort

1

Anscheinend gibt es keine Lösung - nach durchaus ein paar mehr Stunden googeln um, ich nur dieses Ticket gefunden habe (noch?):

https://java.net/jira/browse/JAX_WS_COMMONS-134

Mit Blick auf sein Datum und seinen Status (und die Tatsache, dass die Entwickler nicht einmal darauf reagiert haben, ist sogar ein Jahr vergangen), kann ich sicher sein, dass JAX-WS Commons Spring Integration kein Java unterstützt Konfiguration in absehbarer Zeit.

0

Sie können dies erreichen, indem Sie Ihren Endpunkt und die folgende Hilfsmethode Injektion (beachten Sie, dass mein Ansatz nutzt eine Basisklasse BaseEndpoint für jeden Endpunkt):

@Configuration 
public WebserviceConfiguration { 

    @Inject 
    private FooEndpoint fooEndpoint; 

    @Bean  
    public SpringBinding fooEndpoint() throws Exception { 
     return bind(fooEndpoint, "ws/bar"); 
    } 

    private SpringBinding bind(BaseEndpoint endpoint, String url) throws Exception { 
     SpringService springService = new SpringService(); 
     springService.setBean(endpoint); 
     SpringBinding binding = new SpringBinding(); 
     binding.setService(springService.getObject()); 
     binding.setUrl(url); 
     return binding; 
    } 

} 
+0

Sehen ziemlich solide. Werde es versuchen und wenn es funktioniert, werde ich die akzeptierte Antwort ändern. (Wenn ich kann ... SO Anfänger hier) –