拥有JAXB-RI和CXF。 WSDL优先。我想要一个生成的类来实现Serializable
。我现在有以下绑定xml,它可以工作(SEI类名称被更改)
<jaxws:bindings xmlns:xsd="http://www.w3.org/2001/XMLSchema" ...>
<bindings node="wsdl:definitions/wsdl:portType[@name='Foo']">
<!-- change the generated SEI class -->
<class name="IFooService" />
</bindings>
</jaxws:bindings>
不,在这种情况下,我应该在哪里以及应该添加什么。我试过了:
<xsd:annotation>
<xsd:appinfo>
<jaxb:globalBindings>
<xjc:serializable uid="12343" />
</jaxb:globalBindings>
</xsd:appinfo>
</xsd:annotation>
和
<jxb:globalBindings>
<jxb:serializable/>
</jxb:globalBindings>
在<bindings>
标记的内部和外部 - 未添加Serializable
,或者根本不生成类(没有任何错误)。
那么,究竟如何做到
答案 0 :(得分:7)
我以两种方式工作:
使用第二个绑定文件(仅限JAXB),如Pascal在his answer中所示
通过指定处理整个命名空间的另一个<bindings>
标记:
<bindings
node="wsdl:definitions/wsdl:types/xsd:schema[@targetNamespace='http://www.yoursite.com/services/mynamespace']">
<jxb:globalBindings xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:serializable />
</jxb:globalBindings>
</bindings>
答案 1 :(得分:1)
您可以实现XJC插件来执行此操作:
public class SerializablePlugin extends Plugin
{
@Override
public boolean run(Outline outline, Options options, ErrorHandler errorHandler) throws SAXException
{
for (ClassOutline classOutline : outline.getClasses())
{
JDefinedClass definedClass = classOutline.implClass;
definedClass._implements(codeModel.ref(Serializable.class));
}
return true;
}
...
}
然后,您可以将插件添加到SchemaCompiler选项中:
WsimportOptions wsimportOptions = new WsimportOptions();
wsimportOptions.getSchemaCompiler().getOptions().activePlugins.add(new SerializablePlugin());