Связывание плагинов Apache CXF Maven изменяет содержимое XSD - PullRequest
0 голосов
/ 25 сентября 2019

Я использую Apache CXF Maven Plugin для генерации файлов классов Java из WSDL.В некоторых файлах WSDL используются файлы XSD, которые включают элементы шаблонов RegEx.

Некоторые из этих шаблонов xs: имеют начальный ^ и завершающий $, что приводит к ошибке при создании файлов классов Java.

Из-за того, что я не могу изменить файлы XSD, потому что они автоматически генерируются другой компанией (а эта компания не хочет или они просто не могут изменить это поведение), мне нужно что-то изменить элемент XSD передон используется для генерации файлов классов Java с помощью CXF.

Я уже создал файл привязок и адаптер, но этот адаптер не использовался при генерации файлов классов Java.

Я забыл что-то настроить?

Файл привязки:

<jaxb:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" version="2.1">
    <jaxb:bindings schemaLocation="../wsdl/service/datatypes.xsd">
        <jaxb:bindings node="//xs:simpleType[@name='site-separator']//xs:pattern">
            <xjc:javaType name="java.lang.String" adapter="com.project.util.RegExPatternAdapter" />
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

Запись Maven:

...
<execution>
    <id>SiteService</id>
    <phase>generate-sources</phase>
    <configuration>
        <sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
        <wsdlOptions>
        <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/service/SiteService.wsdl</wsdl>
            <bindingFiles>
                <bindingFile>${basedir}/src/main/resources/bindings/SiteService_binding.xjb</bindingFile>
            </bindingFiles>
            <extraargs>
                <extraarg>-verbose</extraarg>
            </extraargs>
        </wsdlOption>
        </wsdlOptions>
    </configuration>
    <goals>
        <goal>wsdl2java</goal>
    </goals>
</execution>
...

XML-адаптер:

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class RegExPatternAdapter extends XmlAdapter<String, String> {
    @Override
    public String unmarshal (final String s) throws Exception {
        System.out.println("UnMarshal");

        if(s == null) {
            throw new Exception("No value available.");
        }

        if(s.length() > 3) {
            System.out.println(s.substring(1, s.length()-1));
        }

        return s;
    }

    @Override
    public String marshal (final String s) throws Exception {
        System.out.println("Marshal");

        if(s == null) {
            throw new Exception("No value available.");
        }

        if(s.length() > 3) {
            System.out.println(s.substring(1, s.length()-1));
        }
        return s;
    }
}
...