CXF代码第一个Web服务正在使用xsd:element form =“unqualified”创建wsdl而不是获取命名空间

时间:2011-07-21 13:51:07

标签: wsdl annotations jaxb jax-ws cxf

我正在使用代码优先方法使用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注释,但没有任何成功。

任何人都知道如何使这个工作?

1 个答案:

答案 0 :(得分:1)

package-info.java文件只能为同一个包中的类声明JAXB默认值;你必须在每个包中加入一个用于生成类生成的包(或者定义注释的更多属性,这不是很有趣)。

幸运的是,这几乎是切割n-paste编码。只需复制一个包信息文件并调整它,如果您希望更改命名空间。