2013-05-31 2 views
7

Я новичок в веб-сервисах Spring и после написания примера программы для факториального обслуживания. Я остаюсь с некоторыми сомнениями. Я думаю, что это как весна веб-сервисы работа: бегВесенний веб-сервисный поток


приложений на сервере и генерирует запрос -> Запрос отправляется в диспетчерский сервлет, как это определено в web.xml -> Диспетчер сервлета выглядит для [сервлет-имя] -servlet.xml -> диспетчер сервлет затем ищет payloadroot, который находит правильную конечную точку -> запрос XML идет в конечную точку -> ответ порождается конечной


Теперь мои сомнения:

  1. Как запрос, который приходит к конечной точке приходит в виде XML? Я знаю, что XSD помогает создавать xml, но когда он это делает?
  2. В этом процессе, когда wsdl построен?

Ниже приведены определения боб то есть: [servlet-name]-servlet.xml файл:

<beans ...> 
    <bean id="findFactorialService" class="springws.findFactorial.FindFactorialServiceImpl"/> 

    <bean id="findFactorialServiceEndpoint" class="springws.findFactorial.endpoint.FindFactorialServiceEndpoint"> 
     <property name="findFactorialService" ref="findFactorialService" /> 
    </bean> 

    <bean id="payloadMapping" class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"> 
      <property name="defaultEndpoint" ref="findFactorialServiceEndpoint" /> 
     </bean> 

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

     <bean id="findFactorial" class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"> 
      <property name="schema" ref="findFactorialSchema" /> 
      <property name="portTypeName" value="hello" /> 
      <property name="locationUri" value="http://localhost:7070/find-factorial-using-contractfirst/services" /> 
     </bean> 
    </beans> 

ответ

4
  1. XSD не генерирует xml, он используется для его проверки. Он также используется людьми, которые пишут клиенты, чтобы понять, как сформировать их xml для отправки на ваш сервис. «Запрос» - это сообщение, отправленное вашей службой каким-то клиентом - как он попадает в вашу службу, обычно, через протокол http (протокол всемирной сети).

  2. Вы упомянули в своем коде, что это должно быть контрактным - это означает, что вы должны написать wsdl, прежде чем делать что-либо еще (хотя обычно это делается в сочетании с xsd, описывающим интерфейс) , Затем Spring может быть сконфигурирован с помощью wsdl и некоторыми аннотациями для обработки сообщения - вы можете даже автоматически связывать, используя jaxb, непосредственно в java-объекты в вашем коде, чтобы вам не пришлось вручную анализировать входящую полезную нагрузку xml.

This is old, но имеет тот же подход, который вы используете, и даже использует одни и те же устаревшие классы пружинные.

Многие разработчики в наши дни избегают веб-сервисов WS- * в пользу веб-сервисов, основанных на REST, которые очень легко реализуются с использованием spring-web и spring-mvc с несколькими простыми аннотациями на java POJO. Вы даже можете весной автоматически привязать свою полезную нагрузку xml к java-объектам, сгенерированным из xsd, если хотите, так что вам больше не придется разбираться с XML в любой момент.

0
  1. весна использует JAXB сериализовать в XML и разбора из запроса.
  2. Если вы используете JAX-WS, то во время выполнения (по умолчанию) генерируется WSDL, но также может быть предоставлен предварительно сформированный WSDL.

Чтобы решить Ваш комментарий:

Если вы посмотрите на spring-ws-core зависимостей Maven, вы будете наблюдать, что он имеет зависимость к spring-oxm (абстракцию над XML < -> объект отображений), который имеет зависимость от проекта jaxb-api.

Ознакомьтесь с тем, что вы фактически используете в своих зависимостях. JAXB может появиться из каталога приложений/lib.

И второй пункт. JAXB используется не только для сериализации в xml, но и для десериализации из xml.

+0

1-я вещь: я не пользуюсь услугами или банками JAXB. 2nd thing: JAXB использует классы java для преобразования в xml .., но запрос подходит к конечной точке только в виде xml. форма объекта. – Chandeep

+0

обновил ответ – WeMakeSoftware

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