Java JAXB生成的类可通过JAX-WS绑定序列化
具有JAXB-RI和CXF。首先是WSDL。我想要一个生成的类来实现Java JAXB生成的类可通过JAX-WS绑定序列化,java,jaxb,jax-ws,cxf,Java,Jaxb,Jax Ws,Cxf,具有JAXB-RI和CXF。首先是WSDL。我想要一个生成的类来实现Serializable。现在我有了下面的绑定xml,它可以工作(SEI类名被更改) 不,在这种情况下,我应该在哪里补充什么。我试过: <xsd:annotation> <xsd:appinfo> <jaxb:globalBindings> <xjc:serializable uid="12343" /> <
Serializable
。现在我有了下面的绑定xml,它可以工作(SEI类名被更改)
不,在这种情况下,我应该在哪里补充什么。我试过:
<xsd:annotation>
<xsd:appinfo>
<jaxb:globalBindings>
<xjc:serializable uid="12343" />
</jaxb:globalBindings>
</xsd:appinfo>
</xsd:annotation>
及
标记的内部和外部-要么未添加可序列化
,要么根本未生成类(无任何错误)
另见
那么,具体如何做到这一点呢?我通过两种方式实现了这一点:
标记:
<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>
您可以实现一个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());
JAXB绑定定制是一个真正的难题。它们是JAXB1.x糟糕的旧时代遗留下来的东西,而且它从来没有为2.x进行过适当的重新设计。可能的重复可以在这些基础上扩展吗?对于#1,如何将第二个文件传递到
wsimport
?对于#2,
中的哪个位置是这样的,jaxws
是示例中的默认名称空间?
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;
}
...
}
WsimportOptions wsimportOptions = new WsimportOptions();
wsimportOptions.getSchemaCompiler().getOptions().activePlugins.add(new SerializablePlugin());