Spring-ws: несколько конечных точек / wsdl / xsd / вы-назовите-это

#xsd #wsdl #spring-ws #endpoint

#xsd #wsdl #spring-ws #конечная точка

Вопрос:

Информация: я использую Spring-ws 1.5.9 и Spring 2.5.6

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

Прямо сейчас у меня есть один веб-сервис. Он (конечно) содержит один wsdl и одну конечную точку и так далее.

В настоящее время я расширяю веб-службу, и там я создал еще один xsd, код автоматической генерации с использованием JAXB2 (xjc) и так далее.

Теперь, как я должен обрабатывать эти xsd, wsdl (ы), код и так далее? Я не вижу, что рекомендует Spring-ws…

Мой архитектор хотел бы иметь один wsdl, что может быть достигнуто с помощью следующего:

 <bean id="schemaCollection" class="org.springframework.xml.xsd.commons.CommonsXsdSchemaCollection">
<property name="xsds">
    <list>
        <value>one.xsd</value>
        <value>two.xsd</value>
    </list>
</property>
<property name="inline" value="true"/>
  

Это хороший способ сделать это? В итоге у меня будет примерно 10-15 веб-сервисов, таким образом, большой wsdl.

Как насчет конечных точек? Должен ли я создать единую конечную точку и проверить тип запроса (например, используя instanceof)? Я сам считаю, что сопоставление одной конечной точки с одним запросом более элегантно / чисто.

Наконец, как насчет маршалинга? У меня есть это (с одним ws / schema):

     <oxm:jaxb2-marshaller id="marshaller" contextPath="mydomain.signals.one.v1_0.schemas"/>
<oxm:jaxb2-marshaller id="unmarshaller" contextPath="mydomain.signals.v1_0.schemas"/>
  

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

     <bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="contextPaths">
        <list>
            <value>mydomain.signals.one.v1_0.schemas</value>
            <value>mydomain.signals.two.v1_0.schemas</value>
        </list>
    </property>
</bean>
  

Я надеюсь, что это имеет смысл. То, к чему я стремлюсь, — это указатели и подсказки относительно того, что я должен делать.

Ответ №1:

Если у вас есть 10-15 веб-сервисов, невозможно обойти отсутствие огромного wsdl. Если целью является один wsdl, то то, что вы делаете, кажется приемлемым.

Я бы предпочел конечные точки для каждого запроса.

Кроме того, вы пробовали использовать список значений, разделенных двоеточием, для вашего контекстного пути? Итак, не используйте список, просто имейте одну длинную строку с каждым контекстным путем, разделенным двоеточиями.

Из документации Spring-WS:

Контекстный путь представляет собой список имен пакетов Java, разделенных двоеточием (:), которые содержат классы, производные от схемы.

Я знаю, что этот отрывок предназначен для Jaxb1, но я почти уверен, что он по-прежнему применим к Jaxb2Marshaller. Я думаю, вы бы использовали вариант списка только в том случае, если бы указывали классы.

http://static.springsource.org/spring-ws/site/reference/html/oxm.html

Комментарии:

1. Да, я обнаружил часть с двоеточием, хотя это делает xml совершенно нечитаемым (со временем это будет ужасно).

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