Законно ли отклонять WSDL, в которых пространства имен отличаются только расширением файла (часть после последней точки)? - PullRequest
0 голосов
/ 23 ноября 2018

У меня сложное веб-приложение, которое использует множество веб-сервисов.Я должен начать использовать новый.WSDL этой новой службы определяет целевое пространство имен, которое почти совпадает с пространством имен, используемым в более раннем WSDL.Отличается только часть после последней точки.

Имена пакетов, выведенные JAXB, для них одинаковы, а объектная фабрика, сгенерированная из второй, перезаписывает другую.

Например, один wsdlимеет целевое пространство имен "http://foo.com/a.b.c",, у другого -" http://foo.com/a.b.c_2". Тогда имя пакета java будет com.foo.ab для обоих пространств имен, что является своего рода коллизией.

Iпроверил спецификацию JAXB и нашел это (https://download.oracle.com/otn-pub/jcp/jaxb-2.0-fr-eval-oth-JSpec/jaxb-2_0-fr-spec.pdf?AuthParam=1542978637_f7c18a1892b0ff022071acdab6259bdd):

D.5.1 Отображение из URI пространства имен Пространство имен XML представлено URI.Поскольку пространство имен XML будет отображаться в пакет Java, необходимо указать отображение по умолчанию из URI в имя пакета Java.Формат URI описан в [RFC2396].Следующие шаги описывают, как сопоставить URI с именем пакета Java.Пример URI, http://www.acme.com/go/espeak.xsd, используется для иллюстрации каждого шага.

  1. Удалите схему и часть ":" из начала URI, если таковой имеется.Поскольку не существует формального синтаксиса для идентификации необязательной схемы URI, ограничьте удаляемые схемы проверками без учета регистра для схем «http» и «urn».

    // www.acme.com/go/espeak.xsd

  2. Удалить конечный тип файла, один из. ??или же .???или .html.

    // www.acme.com/go/espeak

    ...

Возможно, для меня есть обходные пути, но я бы хотел, чтобы поставщик веб-служб "исправил" ситуацию, используя "правильные" пространства имен, которые не отличаются только последней частью (расширение имени файла на языке JAXB?).

Я ищу аргументы для "моего дела".

1 Ответ

0 голосов
/ 24 ноября 2018

См. Пространства имен в XML 1.0 §2.3 Сравнение ссылок URI :

Сравнение ссылок URI, идентифицирующих пространства имен, при определении, принадлежит ли имя кзаданное пространство имен и принадлежат ли два имени одному пространству имен.[Определение: два URI обрабатываются как строки, и они идентичны тогда и только тогда, когда строки идентичны, то есть, если они представляют собой одинаковую последовательность символов.] Сравнение чувствительно к регистру, и% -эскапирование не выполняется и не отменяется.

Если ваши пространства имен «отличаются только расширением файла», это разные пространства имен.Если ваши инструменты генерируют один и тот же пакет для них, проблема на вашей стороне, а не на стороне автора WSDL.

Так что нет, у вас нет действительно хороших аргументов для «вашего случая», извините.

Исправление тривиально: просто настройте целевой пакет для каждого пространства имен.См., Например, следующий вопрос:

CXF: Как изменить пакет импортированной WSDL XML-схемы с помощью файла внешней привязки JAXB?

...