Ich mache meine ersten Schritte mit Spring Boot und erstellen einen SOAP-Webdienst.Fest mit Fehler "Kein Endpunkt-Mapping für SaajSoapMessage gefunden"
Nach dem Erstellen eines SOAP-Web-Service (https://spring.io/guides/gs/producing-web-service/) Tutorial, ich habe es geschafft, einen einfachen Web-Service zu erstellen, der funktionierte.
In diesem Beispiel versuche ich jetzt, einen Webdienst mit mehr als einer Operation zu erstellen. Dieses Mal habe ich eine WSDL verwendet, um alle JAXB-Klassen zu generieren. Alles wird korrekt generiert und ich kann den Webservice aufrufen und das WSDL als Ergebnis erhalten.
Ich habe dann verwendet SOAP UI Musteranfragen für meine Methoden auf dem zurück Wsdl zu generieren, aber wenn ich versuche, sie mir den Fehler auszuführen (Warnung tatsächlich):
10280 WARN --- [ nio-8080-exec-1] osws.server.EndpointNotFound: kein Endpunkt-Zuordnung für [SaajSoapMessage Ping gefunden]
Und ich habe in dieser für die letzten zwei Tage aufgeklebt. In der Annahme, dass das Problem in den Parametern meiner Endpunktmethode nicht übereinstimmen könnte, habe ich versucht, eine Operationg (Ping) zu erstellen, die eine einzelne Zeichenfolge empfängt, aber selbst diese fehlschlägt.
Ich verwende eine Konfigurator-Klasse und alle Beispiele, die ich finden konnte, verwenden Konfigurationsdateien (web.xml und die Servlet-Datei), und ich kann die Teile nicht zusammensetzen, um das zu beheben.
Dies ist meine Konfigurationsklasse (Ich habe die Einfuhr entfernt um Platz zu sparen):
package ws;
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(applicationContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/SVN/*");
}
@Bean (name = "SVNClient")
public Wsdl11Definition defaultWsdl11Definition() {
SimpleWsdl11Definition wsdl11Definition = new SimpleWsdl11Definition();
wsdl11Definition.setWsdl(new ClassPathResource("/wsdl/SVNClient.wsdl"));
return wsdl11Definition;
}
}
Und das ist die Klasse, wo ich meine Endpunkte haben (ich die Importe entfernt haben um Platz zu sparen):
package ws;
@Endpoint
public class WebServiceEndPoint {
private static final String NAMESPACE_URI = "http://gestion.svn.client";
@Autowired
public WebServiceEndPoint() {
System.out.println("Entramos en WebServiceEndPoint");
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "Ping")
public @ResponsePayload PingResponse ping() {
PingResponse resposta = new PingResponse();
resposta.setOut("I'm in");
return resposta;
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getLog")
public @ResponsePayload GetLogResponse getLog(@RequestPayload InputParameters wsPayload) {
GetLogResponse response = new GetLogResponse();
response.setCODERROR("0");
response.setMENSAJEERROR("I'm in");
return response;
}
Mein Zweifel ist:
Sind die @Endpoint
und @PayloadRoot
Anmerkungen genug, um die Endpunkte zu den Web-Service-Operationen abzubilden? Ich meine:
- Gibt es etwas über die Methoden oder Parameter deklaracion, die sie nicht übereinstimmen mit der Web-Service-Definition?
- Oder brauche ich noch eine Konfigurationsdatei (web.xml, Servlets oder etwas anderes), um diese Zuordnung durchzuführen?