Я использую 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;
}
}