Плагин JAXB2 Maven xj c Ошибка разбора: org. xml .sax.SAXParseException: Неожиданно появляется - PullRequest
2 голосов
/ 13 марта 2020

Я хочу использовать плагин maven JAXB2 для генерации Java объектов из файла WSDL для использования сервиса soap в качестве клиента.

Когда я использую этот плагин в качестве "jaxb2: generate" и конфигурации ниже :

...
        <plugin>
                <groupId>org.jvnet.jaxb2.maven2</groupId>
                <artifactId>maven-jaxb2-plugin</artifactId>
                <version>0.14.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <schemaLanguage>WSDL</schemaLanguage>
                    <generatePackage>tr.com.foo.dummy.model</generatePackage>
                    <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
                    <schemaDirectory>${project.basedir}/src/main/resources/wsdl</schemaDirectory>
                    <bindingDirectory>${project.basedir}/src/main/resources</bindingDirectory>
                    <bindingIncludes>
                        <bindingInclude>*.xjb</bindingInclude>
                    </bindingIncludes>
                    <schemaIncludes>
                        <include>*.wsdl</include>
                    </schemaIncludes>
                </configuration>
            </plugin>

...

Я получаю сообщение об ошибке:

[INFO] --- maven-jaxb2-plugin:0.14.0:generate (default-cli) @ hmbs ---
[INFO] Latest timestamp of the source resources is [2020-03-13 18:10:23.000], earliest timestamp of the target resources is [2020-03-06 18:06:36.000].
[INFO] Sources are not up-to-date, XJC will be executed.
[ERROR] Error while parsing schema(s).Location [ file:/home/yigithan/playground/foo/bar/src/main/resources/wsdl/foo.wsdl{23,87}].
org.xml.sax.SAXParseException: Unexpected <xs:element> appears at line 23 column 87 
...

И мой файл WSDL имеет вид:

<?xml version="1.0" encoding="utf-8" ?>
<wsdl:definitions xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/"
                  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
                  xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/"
                  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:s1="http://tempuri.org/AbstractTypes"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
                  xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://tempuri.org/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:types>
        <xs:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/" version="1.0">
            <xs:element name="Insert">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element minOccurs="0" maxOccurs="1" name="custom" type="tns:Custom"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="Custom">
                <xs:sequence>
                    <xs:element minOccurs="1" maxOccurs="1" name="foo" type="xs:int"/>
                    <xs:element minOccurs="1" maxOccurs="1" name="bar" type="xs:int"/>
                    <xs:element minOccurs="1" maxOccurs="1" name="baz" type="xs:long"/> 
                    <xs:element minOccurs="1" maxOccurs="1" name="qux" type="xs:dateTime"/>
                </xs:sequence>
            </xs:complexType>
...

И место ошибки находится в строке, которая содержит элемент "qux", а точка {23, 87} представляет собой тип = "xs: dateTime" из "qux". Как видите, нет ничего неожиданного. Или я что-то упустил?

1 Ответ

0 голосов
/ 16 марта 2020

Хорошо, я решил проблему. Это был действительно долгий путь к решению. Возникли две проблемы. Во-первых, именно поэтому я и задал этот вопрос в первую очередь, файл WSDL был отправлен мне в виде файла DOCX, и необходимо переформатировать файл, даже если я скопировал содержимое файла внутри WSDL файл. По переформатированию я не говорю о xml структуре. Это было похоже на шутку, но удаление пустых строк и повторное создание файла сработало.

Следующая проблема возникает как «неожиданная последовательность» в таком месте, как:

<s:schema targetNamespace="http://tempuri.org/AbstractTypes">
            <s:import namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
            <s:complexType name="StringArray">
                <s:complexContent>
                    <s:restriction base="soapenc:Array">
                        <s:sequence>
                            <s:element maxOccurs="unbounded" minOccurs="0" name="String" type="s:string"/>
                        </s:sequence>
                    </s:restriction>
                </s:complexContent>
            </s:complexType>
        </s:schema>

И причина этого JAXB2 не может обрабатывать закодированные типы согласно моим исследованиям. Таким образом, если происходит несвязанная ошибка, сначала попытайтесь выполнить рефакторинг файла xml в случае неправильного построения xml, а затем убедитесь, что плагин совместим с типами, которые вы используете.

Плагин maven-jaxrp c хорошо работает в этой ситуации.

ПРИМЕЧАНИЕ: R2110 В ОПИСАНИИ декларации НЕ ДОЛЖНЫ расширять или ограничивать soapen c: Тип массива.

...