2013-03-22 2 views
3

Я пытаюсь оценить Spring Integration, специально заинтересованную в предоставлении простой службы POJO в веб-сервисе на основе SOAP через активатор службы. В настоящее время я застрял & имеют выпуск, генерирующий динамический wsdl. WSDL не загружен & браузер показывает ошибку 404. я пытаюсь получить доступ со следующим URL на моем локальномSpring Integration inbound webservices генерация wsdl

http://localhost:8080/ws-inbound-gateway/echoService 
http://localhost:8080/ws-inbound-gateway/echoService/echoService.wsdl 

Ниже конфигурация

въездной-шлюз-config.xml

<int:channel id="inbound" /> 

    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
     <property name="contextPath" value="com.manish.schema.generated" /> 
    </bean> 

    <int-ws:inbound-gateway id="empServiceGateway" 
     request-channel="inbound" marshaller="marshaller" 
     unmarshaller="marshaller" /> 

    <int:service-activator input-channel="inbound" 
     requires-reply="true" ref="employeeServiceActivator" method="getEmployeeDetails"> 

    </int:service-activator> 

    <bean id="employeeServiceActivator" 
     class="org.springframework.integration.samples.ws.EmployeeServiceResponder" /> 

    <bean id="employeeService" class="com.manish.service.EmployeeService" /> 

EmployeeService просто класс POJO, а EmployeeServiceResponder является активатор услуги, который вызывает метод в классе обслуживания.

Для генерации динамического WSDL

весна-WS-config.xml

<import resource="classpath:/META-INF/spring/integration/inbound-gateway-config.xml" /> 

<sws:dynamic-wsdl id="echoService" portTypeName="empServiceGateway" locationUri="/echoService" targetNamespace="http://manish.niyati.com/echo"> 
    <sws:xsd location="/WEB-INF/echo.xsd"/> 
</sws:dynamic-wsdl> 

<bean 
    class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping"> 
    <property name="defaultEndpoint" ref="empServiceGateway"></property> 
</bean> 

web.xml

<servlet> 
    <servlet-name>spring-ws</servlet-name> 
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>WEB-INF/spring-ws-config.xml</param-value> 
    </init-param> 
    <init-param> 
     <param-name>transformWsdlLocations</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>spring-ws</servlet-name> 
    <url-pattern>/echoService</url-pattern> 
</servlet-mapping> 

Пожалуйста, дайте мне знать, что еще не хватает для того, чтобы сделать эту услугу доступный как веб-сервис через SI.

Кроме того, когда я пытаюсь получить доступ к сервису с помощью шаблона WebService я получаю SoapFault

02:18:59.436 INFO [main][org.springframework.ws.soap.saaj.SaajSoapMessageFactory] Creating SAAJ 1.3 MessageFactory with SOAP 1.1 Protocol 
02:18:59.437 DEBUG [main][org.springframework.ws.soap.saaj.SaajSoapMessageFactory] Using MessageFactory class [com.sun.xml.internal.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl] 
02:18:59.484 DEBUG [main][org.springframework.ws.client.core.WebServiceTemplate] Opening [[email protected]] to [http://localhost:8080/ws-inbound-gateway/echoService] 
02:18:59.519 TRACE [main][org.springframework.ws.soap.saaj.support.SaajUtils] SOAPElement [com.sun.xml.internal.messaging.saaj.soap.ver1_1.Envelope1_1Impl] implements SAAJ 1.3 
02:18:59.535 TRACE [main][org.springframework.ws.soap.saaj.support.SaajUtils] SOAPElement [com.sun.xml.internal.messaging.saaj.soap.ver1_1.Body1_1Impl] implements SAAJ 1.3 
02:18:59.562 TRACE [main][org.springframework.ws.client.MessageTracing.sent] Sent request [<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ed:employeeRequest xmlns:ed="http://manish.niyati.com/echo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ed:empid>100</ed:empid> </ed:employeeRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>] 
02:18:59.604 TRACE [main][org.springframework.ws.client.MessageTracing.received] Received response [<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring xml:lang="en">**java.lang.NullPointerException**</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>] for request [<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><SOAP-ENV:Body><ed:employeeRequest xmlns:ed="http://manish.niyati.com/echo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ed:empid>100</ed:empid> </ed:employeeRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>] 
02:18:59.605 DEBUG [main][org.springframework.ws.client.core.WebServiceTemplate] Received Fault message for request [SaajSoapMessage {http://manish.niyati.com/echo}employeeRequest] 
02:18:59.607 TRACE [main][org.springframework.ws.soap.saaj.support.SaajUtils] SOAPElement [com.sun.xml.internal.messaging.saaj.soap.ver1_1.Fault1_1Impl] implements SAAJ 1.3 

Заранее спасибо -MS

+0

Используете ли вы какие-либо эталонные реализации? например Apache cxf служит отличным RI для разработки веб-сервисов с конфигурацией пружины. – Sujan

ответ

0

Чтобы получить WSDL, измените url-шаблон web.xml на <url-pattern>/*</url-pattern>.

и URL-адрес http://localhost:8080/ws-inbound-gateway/echoService.wsdl.

Все остальное выглядит хорошо.

Что касается WebServiceTemplateQuestion, что вы отправляете? Похоже, что вы используете приложение WS образца, который использует WebServiceTemplate ...

@Test 
public void testWebServiceRequestAndResponse() { 
    StringResult result = new StringResult(); 
    Source payload = new StringSource(
      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
      "<echoRequest xmlns=\"http://www.springframework.org/spring-ws/samples/echo\">hello</echoRequest>"); 

    template.sendSourceAndReceiveToResult(WS_URI, payload, result); 
    logger.info("RESULT: " + result.toString()); 
    assertThat(result.toString(), equalTo(
      "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + 
      "<echoResponse xmlns=\"http://www.springframework.org/spring-ws/samples/echo\">hello</echoResponse>")); 
} 

И это прекрасно работает.

Похоже, что ваш NPE находится на сервере - посмотрите журналы сервера, чтобы узнать, что произошло.

+0

Совершенно ... теперь ** исправлено **. также разрешил NPE .. это было из-за неправильной автоподготовки .. Спасибо Гэри .. – user2191296

0

Вы делаете это в гораздо более сложным образом. С простой конфигурацией и использованием некоторых основных аннотаций вы можете создать веб-сервис за короткое время.

Я сам использовал Apache CXF для разработки веб-сервисов, и это неплохо для конфигурации на весну. Вы также можете взглянуть на это blog. Он показал все шаги с цифрами для создания веб-службы с генерацией wsdl и клиентом для использования веб-службы.

+0

спасибо за ваш ответ, я использовал весну ws раньше и смог развить ws гладко .. но SI - это другой подход для разработки корпоративных сообщений.через SI приложение может быть разработано с учетом различных EIP. Сообщения могут быть источником и предназначены для любого источника, включая файловую систему, JMS, JPA, WS, REST, Socket, пакетный процесс, TCP, HTTP, RMI, JDBC и т. Д. – user2191296

Смежные вопросы