2015-06-20 2 views
2

Я собираюсь создать простой проект WS весной и весной WS без XSD. Развернитесь на пристани. Возможно заполнять конечную точку WS и генерировать WSDL только из классов Java (без статического XSD или WSDL - я прошел через множество обучающих программ, но все требовал).Spring WS без xsd

Для любой помощи, подсказки или ссылки высоко оценили.

У меня есть что-то вроде этого:

1) Запрос

@XmlRootElement 
public class MessageWSRequest { 

@XmlElement 
private String message; 

public String getMessage() { 
    return message; 
} 

public void setMessage(String message) { 
    this.message = message; 
} 
} 

2) Конечная точка

@Endpoint 
public class MessageWS { 
@PayloadRoot(namespace = "http://message.com/ws/message" ,localPart="MessageWSRequest") 
public String handleMathServiceRequest(@RequestPayload MessageWSRequest messageWSRequest) { 
    return "ok"; 
} 
} 

3) springContext.xml

<sws:annotation-driven/> 
<context:component-scan base-package="com.ws.message"/> 

4) веб. xml

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

<servlet-mapping> 
    <servlet-name>webservices</servlet-name> 
    <url-pattern>*.wsdl</url-pattern> 
</servlet-mapping> 

<servlet-mapping> 
    <servlet-name>webservices</servlet-name> 
    <url-pattern>/endpoints/*</url-pattern> 
</servlet-mapping> 

Теперь я хотел бы ожидать URL, как этот localhost:8080/messageTest/endpoints/MessageWS.wsdl с сгенерированного WSDL.

Я пропустил какую-то конфигурацию или так?

Спасибо всем

ответ

2

Ok, на следующий день ясный ум revelead мне этот факт: Spring WS предлагает "только" контракт-первых, начиная от схемы XSD

Я буду использовать CXF вместо : Apache CXF предлагает как контракт-последний (начиная с Java), так и подход Contract-first (начиная с WSDL).

+0

Который не будет работать. Все они требуют XSD. Как вы получаете этот XSD (сгенерируйте его из своего java-кода или создайте его вручную) не имеет значения. Вы можете использовать свои классы для генерации xsd, который, в свою очередь, может использоваться Spring WS для создания wsdl. Это не имеет ничего общего с контрактом - первым или последним контрактом, но тем фактом, что XSD является контрактом на веб-службу. –

+0

CXF (и, как правило, любая реализация JAX-WS) автоматически генерирует XSD для первых служб кода. –

0

Как вы уже отметили, Spring WS предназначен для оказания первой услуги по контракту. Однако я думаю, что вы все равно можете добиться того, что хотите, если вы создадите XSD во время процесса сборки из ваших аннотированных классов. Вот один из способов сделать это:

Generating XSD schemas from JAXB types in Maven?

+0

Спасибо за это. Это немного лучше, но все еще нуждается в дополнительном рутине. Но это потому, что контракт-первый подход. – user3070136

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