2012-10-15 13 views
6

Ich implementiere derzeit einen Spring Web Service mit Jaxb. Aber wenn ich versuche, den Web-Service zu konsumieren, der erstellt wurde, ist ein WebServiceTransportException: Not Found [404] Fehler aufgetreten. Ich habe versucht, im Internet zu suchen, konnte aber keine mögliche Ursache finden. Unten habe ich meine Quellcodes gezeigt.WebServiceTransportException: Not Found [404]

applikations context.xml

<bean 
    class="org.springframework.ws.server.endpoint.adapter.GenericMarshallingMethodEndpointAdapter"> 
    <constructor-arg ref="marshaller" /> 
</bean> 

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="classesToBeBound"> 
     <list> 
      <value>com.ph.domain.EightBallRequest</value> 
      <value>com.ph.domain.EightBallResponse</value> 
     </list> 
    </property> 
</bean> 

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/jsp/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

<bean id="simpleUrlHandlerMapping" 
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" 
    lazy-init="true"> 
    <property name="mappings"> 
     <props> 
      <prop key="/test.asp">LandingController</prop> 
     </props> 
    </property> 
</bean>  

<bean name="LandingController" class="com.ph.controller.LandingController"> 
    <property name="stub" ref="eightBallClient"/> 
</bean> 

Client für webservice

public class EightBallClient extends WebServiceGatewaySupport { 

private Resource request; 

public void setRequest(Resource request) { 
    this.request = request; 
} 

public String AskQuestion(String question) throws IOException { 
    String responseString = null; 

    EightBallRequest request = new EightBallRequest(); 
    request.setQuestion(question); 

    EightBallResponse response = new EightBallResponse(); 

    response = (EightBallResponse) getWebServiceTemplate() 
      .marshalSendAndReceive(request); 
    responseString = response.getAnswer().toString(); 
    return responseString; 
} 
} 

Definition meiner Web-Service

<bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema"> 
    <property name="xsd" value="/WEB-INF/eightball.xsd" /> 
</bean> 

Und unten ist die Fehler-Stack:

SEVERE: Servlet.service() for servlet dispatcher threw exception 
org.springframework.ws.client.WebServiceTransportException: Not Found [404] 
    at org.springframework.ws.client.core.WebServiceTemplate.handleError(WebServiceTemplate.java:626) 
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:550) 
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:501) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:350) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:344) 
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:336) 
+0

Bitte überprüfen Sie die Lib-Ordner haben Sie dieses Glas Spring-Oxm-1.5.6.jar enthalten? – Ami

+0

@ILLA - ja, feder OXM-1.5.6.jar ist sowie jar Felder umfassen: \ n feder OXM-tiger feder ws ws Federkern Feder-ws-core- Tiger – plandi07

+0

@ILLA - kennen Sie eine Website, die vollständige Tutorial/Implementierung von Frühjahr Web-Service-Erstellung mit JAXB bis zum Verbrauch von Service für den Client bieten. Ich bin etwas verwirrt darüber, wie der Client den Frühling Webservice verbrauchen wird ... Ich bin derzeit auf Projekt, das vorhandene Service-Layer von Federmvc-Anwendung verfügbar machen muss, so dass andere Anwendung es verwenden kann. irgendeine Idee? Danke im Voraus. – plandi07

Antwort

0

Vielleicht ist Ihr URI:

<bean name="webserviceTemplate" 
class="org.springframework.ws.client.core.WebServiceTemplate"> 
    <property name="defaultUri" value="http://localhost:8080/mywebservice" /> 

überprüfen dieser Wert:

"http://mylocal:8080/mywebservice"

1

Hier wird wie habe ich diesen Fehler behoben:

  1. Deklarieren Sie einen SoapActionCallback.
  2. Verwenden Sie diesen Rückruf in der MarshalSendAndReceive() wie folgt.

    final EightBallResponse response = new EightBallResponse(); 
    final SoapActionCallback soapActionCallback = new SoapActionCallback("<the operation name as defined in the WSDL>"); 
    response = (EightBallResponse) getWebServiceTemplate() 
        .marshalSendAndReceive(request, soapActionCallback); 
    responseString = response.getAnswer().toString(); 
    
1

In meinem Fall war die Lösung Aufmerksamkeit in der URI auf den Fall zu zahlen. Ich hatte es in Kleinbuchstaben, aber der Webservice erwartete einen CamelCase-Aktionsnamen.

Verwandte Themen