2012-10-15 13 views
6

W tej chwili wdrażam usługę sieci web wiosny przy użyciu jaxb. Ale kiedy próbuję skonsumować serwis internetowy, napotkano błąd. Próbowałem przeszukać sieć, ale nie mogłem znaleźć możliwej przyczyny źródłowej. Poniżej pokazuję moje kody źródłowe.WebServiceTransportException: Not Found [404]

aplikacji 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> 

Klient usługa

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; 
} 
} 

definicja mojego serwisu WWW

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

A poniżej jest stos błąd:

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

Proszę sprawdzić folder lib, do którego zawarłeś ten jar spring-oxm-1.5.6.jar? – Ami

+0

@ILLA - tak, sprężyna OXM-1.5.6.jar jest to również jako słoik pola poniżej: \ n sprężyny OXM-tygrysa wiosenne WS wiosenne WS-core wiosenne WS-wkładka skutecznie tygrys – plandi07

+0

@ILLA - znasz stronę, która zapewnia pełny samouczek/implementację z tworzenia wiosennych serwisów internetowych z JAXB do czasu konsumowania usługi do klienta. Trochę mylę się z tym, w jaki sposób klient będzie korzystał z usługi sieciowej wiosennej ... Jestem currenlty w projekcie, który musi eksponować istniejącą warstwę usługi aplikacji Spring Mvc, aby inna aplikacja mogła z niej korzystać. dowolny pomysł? Z góry dziękuję. – plandi07

Odpowiedz

0

Może twój URI:

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

Sprawdź tę wartość:

"http://mylocal:8080/mywebservice"

1

Tutaj jak rozwiązałem ten błąd:

  1. Zadeklarowanie SoapActionCallback.
  2. Użyj tego wywołania zwrotnego w marshalSendAndReceive() w następujący sposób.

    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

W moim przypadku rozwiązaniem było zwrócić uwagę na sprawy w URI. Miałem go we wszystkich małych literach, ale usługa spodziewała się nazwy akcji CamelCase.

Powiązane problemy