Я хочу конкретное сопоставление для данного поля даты, но xpath к этому полю генерирует пустой узел, в то время как онлайн-тестер xpath оценивает его правильно. Как я могу отладить разрешение плагина maven?
Это для обработки клиентских сообщений, у меня нет власти ни над xsd, ни над входящими сообщениями, но мне нужно обрабатывать два xml: Date по-разному. Поэтому мне нужны конкретные привязки, чтобы переопределить глобальную и нацелить нужные поля даты с помощью выражения xpath, но плагин maven не разрешит его правильно
Вот профиль maven, который я использую для генерации:
<profile>
<id>xsd2java</id>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>xjc-schema1</id>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<sources>
<source>./src/main/xsd/out</source>
</sources>
<packageName>test.model.out</packageName>
<clearOutputDir>true</clearOutputDir>
<outputDirectory>./src/main/generated</outputDirectory>
<xjbSources>
<xjbSource>./src/main/xjb</xjbSource>
</xjbSources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
вот мой файл переплета:
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<bindings node="//xs:element[@name='MadeOut']//xs:element[@name='Date']">
<javaType name="java.util.Date" xmlType="xs:date"
parseMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.parseDate"
printMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.printDateWithoutTimeZone"
/>
</bindings>
<globalBindings>
<javaType name="java.util.Date" xmlType="xs:date"
parseMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.parseDate"
printMethod="fr.sncf.fret.ex.socle.utilitaires.bind.Converter.printDate"
/>
</globalBindings>
</bindings>
и вот выдержка из xsd с полем, которое я хочу нацелить с помощью «узла привязки»:
<xs:element name="CIMECNMessages">
<xs:complexType>
<xs:sequence>
<xs:element name="MadeOut">
<xs:complexType>
<xs:sequence>
<xs:element name="Place" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="35" />
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Date" minOccurs="0" type="xs:date">
</xs:element >
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
Я использую эту команду для генерации классов:
mvn -P xsd2java clean install
При запуске команды появляется сообщение «Оценка XPATH» // xs: element [@ name = 'MadeOut'] // xs: element [@ name = 'Date'] "генерирует пустой узел" .
То, что я ищу, это либо:
- подсказка относительно моего выражения xpath и почему оно неверно (если оно есть)
- действующий онлайн-инструмент для проверки моего выражения xpath
- способ / инструмент для отладки фазы разрешения плагина maven, чтобы точно определить, что он видит через это выражение
Примечание: я использовал выражение «// *» xpath в качестве теста, и плагин выдал ошибку «слишком много аргументов, перечисленных этим выражением», поэтому я знаю, что привязка действительно применяется к моему xsd.