#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. Это не самая элегантная вещь, но если вы просто поместите каждую из них в новую строку, она все равно должна быть довольно читаемой.