CXF / JAXB代码优先服务:修改输入的XMLSchemaType

时间:2011-11-08 21:20:48

标签: java wsdl jaxb cxf

我正在开发一个CXF / JAXB代码优先的Web服务。我希望能够修改某些输入的WSDL定义。

例如,给定以下界面片段:

@WebMethod
public void Something(@WebParam(name="date") Date date);

WSDL将为输入“date”生成XMLSchema,使其成为“datetime”xml元素。我希望它只是一个“日期”元素。

能够指定其他一些输入属性也很好,例如minOccurs等。

对于自定义对象,子元素可以通过注释(如XmlElement和XmlSchemaType)定义所有这些内容。但是,这些注释在输入参数上是不合法的。

我知道早期版本的CXF没有处理这个问题,但我不确定以后的版本。我目前正在运行CXF 2.3.5。

1 个答案:

答案 0 :(得分:2)

以下是我从cxf-users列表中得到的答案:

1)通过其中一个JDK认可机制认可JAXB 2.2 API jar。 然后可以在参数上使用XmlElement和XmlSchemaType注释。

(这不太正确 - 我赞同的2.2 jaxb确实允许对参数进行@XmlElement注释,但它不允许@XmlSchemaType注释)

2)创建包装器类型bean(可以使用java2ws -warpperBeans作为起点)并添加@RequestWrapper / @ ResponseWrapper注释 指向它们的方法。你可以精细控制的外观 包装器模式通过bean中的注释。

3)您可以将AbstractServiceConfiguration的额外子类配置到工厂中,您可以覆盖某些方法来设置各种 minOccurs / maxOccurs / etc ..输入东西。非常精细的控制水平,但非常 复杂的事情。