我正在使用代码优先方法使用CXF创建Web服务。 我想使用名称空间,因此 elementFormDefault 设置为 true 。 WSDL很好,除了复杂类型中嵌入的元素之外,我得到了跟随xs:element的 form =“unqualified”标记。但我想摆脱 form = unqualified 标签
<xs:element form="unqualified" name="LikeSearch" type="xs:boolean"/>
我的package-info.java看起来像这样:
@javax.xml.bind.annotation.XmlSchema(namespace="http://registry.erpel.at",
attributeFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
elementFormDefault=javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package at.erpel.registry.services.webservice;
Java端点如下所示:
@WebService(targetNamespace = "http://registry.erpel.at", name="CompanyEndpoint")
public interface CompanyEndpoint {
List<Company> findCompanies(
@WebParam(name = "FindCompaniesRequest") @XmlElement(required=true) FindCompaniesRequest findCompaniesRequest)
throws ServiceFault ;
这是FindCompaniesRequest:
@XmlRootElement(name = "FindCompaniesRequest")
public class FindCompaniesRequest extends AbstractRequestType implements Serializable
{
@XmlElement(name = "LikeSearch", required = true)
protected boolean likeSearch;
...
}
最后是WSDL:
<xs:complexType name="FindCompaniesRequest">
<xs:complexContent>
<xs:extension base="tns:AbstractRequestType">
<xs:sequence>
<xs:element form="unqualified" name="LikeSearch" type="xs:boolean"/>
我想要的是摆脱 form =“不合格”标签
到目前为止,我找到的唯一解决方案是将namespace属性添加到每个XMLElement:
@XmlElement(name = "LikeSearch", required = true, namespace="http://registry.erpel.at")
protected boolean likeSearch;
但我希望子元素只是从父元素中获取命名空间。我已经尝试将namespace属性添加到@XMLRootElement注释,@ WebParam注释以及方法描述中的@XmlElement注释,但没有任何成功。
任何人都知道如何使这个工作?
答案 0 :(得分:1)
package-info.java
文件只能为同一个包中的类声明JAXB默认值;你必须在每个包中加入一个用于生成类生成的包(或者定义注释的更多属性,这不是很有趣)。
幸运的是,这几乎是切割n-paste编码。只需复制一个包信息文件并调整它,如果您希望更改命名空间。