2015-01-30 6 views
3

Я пытаюсь подключить сервер Spring на основе WS и клиент на основе Spring WS. Использование org.codehaus.mojo: jaxb2-maven-plugin на сервере и org.jvnet.jaxb2.maven2: maven-jaxb2-плагин на клиенте.Клиент и сервер Spring Web Services - Нет сопоставления конечных точек

Ошибка:

ПРЕДУПРЕЖДЕНИЕ: Нет отображения конечных точек найдено [SaajSoapMessage {http://localhost:10301/0301-ws-xmlconfig-service} UserRequest]

Это моя конфигурация сервера Spring WS:

userDetails.xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    attributeFormDefault="unqualified" elementFormDefault="qualified" 
    targetNamespace="http://localhost:10301/0301-ws-xmlconfig-service"> 

    <xs:element name="UserDetailsResponse"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element type="xs:NCName" name="FirstName" /> 
     <xs:element type="xs:NCName" name="LastName" /> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 

    <xs:element name="UserRequest"> 
    <xs:complexType> 
     <xs:attribute name="Email"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
      <xs:pattern value="[^@][email protected][^\.]+\..+" /> 
      </xs:restriction> 
     </xs:simpleType> 
     </xs:attribute> 
    </xs:complexType> 
    </xs:element> 

</xs:schema> 

UserEnd point.java:

package net.lkrnac.server; 

import localhost._10301._0301_ws_xmlconfig_service.UserDetailsResponse; 

import org.springframework.ws.server.endpoint.annotation.Endpoint; 
import org.springframework.ws.server.endpoint.annotation.PayloadRoot; 
import org.springframework.ws.server.endpoint.annotation.RequestPayload; 
import org.springframework.ws.server.endpoint.annotation.ResponsePayload; 

@Endpoint 
public class UserEndpoint { 
    @PayloadRoot(namespace = "http://localhost:10301/0301-ws-xmlconfig-service/", localPart = "getUserDetails") 
    @ResponsePayload 
    public UserDetailsResponse getUserDetails(@RequestPayload String userEmail) { 
    UserDetailsResponse userDetails = null; 
    if ("[email protected]".equals(userEmail)) { 
     userDetails = new UserDetailsResponse(); 
     userDetails.setFirstName("Lubos"); 
     userDetails.setLastName("Krnac"); 
    } 
    return userDetails; 
    } 
} 

веб-сервис-config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:ws="http://www.springframework.org/schema/web-services" 
    xsi:schemaLocation="http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 

    <context:component-scan base-package="net.lkrnac.server" /> 

    <ws:annotation-driven /> 
</beans> 

web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    version="2.5"> 
    <display-name>0301-ws-xmlconfig-service</display-name> 
    <servlet> 
    <servlet-name>web-service</servlet-name> 
    <servlet-class>org.springframework.ws.transport.http.MessageDispatcherServlet 
    </servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:web-service-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>web-service</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Это моя конфигурация клиента:

WebServiceClient .java:

package net.lkrnac.client; 

import javax.annotation.PostConstruct; 

import net.lkrnac.model.UserDetailsResponse; 
import net.lkrnac.model.UserRequest; 

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.stereotype.Component; 
import org.springframework.ws.client.core.WebServiceTemplate; 

@Component 
@EnableAutoConfiguration 
public class WebServiceClient { 
    private static final Logger log = LoggerFactory 
     .getLogger(WebServiceClient.class); 

    private static final String URL = 
     "http://localhost:10301/0301-ws-xmlconfig-service/getUserDetails"; 
    private WebServiceTemplate webServiceTemplate; 

    @Autowired 
    public WebServiceClient(WebServiceTemplate webServiceTemplate) { 
    this.webServiceTemplate = webServiceTemplate; 
    } 

    public UserDetailsResponse getUserDetails(String email) { 
    UserRequest request = new UserRequest(); 
    request.setEmail(email); 

    UserDetailsResponse userDetails = 
     (UserDetailsResponse) webServiceTemplate.marshalSendAndReceive(URL, 
      request); 
    return userDetails; 
    } 

    @PostConstruct 
    public void test() { 
    UserDetailsResponse userDetails = 
     this.getUserDetails("[email protected]"); 
    log.debug("User Details: " + userDetails.getFirstName() + " " 
     + userDetails.getLastName()); 
    } 
} 

веб-клиент-config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:web-services="http://www.springframework.org/schema/web-services" 
    xsi:schemaLocation="http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> 

    <context:component-scan base-package="net.lkrnac.client"/> 

    <web-services:annotation-driven/> 
    <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
    <property name="contextPath" value="net.lkrnac.model"/> 
    </bean> 

    <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> 
    <property name="marshaller" ref="marshaller"/> 
    <property name="unmarshaller" ref="marshaller"/> 
    </bean> 
</beans> 

ли кто-нибудь есть ключ?

+0

Попробуйте удалить конечную косую черту в пространстве имен, определенных в вашей UserEndpoint: @PayloadRoot (namespace = "http: // localhost: 10301/0301-ws-xmlconfig-service", localPart .... –

+0

Такое же поведение :( – luboskrnac

+1

Еще одна вещь, которую нужно попробовать, поскольку в сообщении говорится, что конечная точка должна ожидать UserRequest, поэтому localPart должен равняться UserRequest. Также, если вы используете log4j, попробуйте включить строку «log4j.logger.org.springframework.ws = trace», чтобы включить журналы трассировки обмена –

ответ

2

сообщение журнала утверждает, что конечная точка должна соответствовать namespace="http://localhost:10301/0301-ws-xmlconfig-service" и ожидает UserRequest, так что локальная часть должна соответствовать UserRequest.

+1

Может наградить награду через 9 часов, так что сделайте это завтра. – luboskrnac