我正在开发一个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。
答案 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 ..输入东西。非常精细的控制水平,但非常 复杂的事情。