如何在JAX-WS Web服务中全局配置目标命名空间?

tim*_*nen 7 java-metro-framework jax-ws convention-over-configur

我有很多端点注释@WebService(targetNamespace = "mynamespace").每一个@WebResult与@WebParam具有相同的定义targetNamespace = "mynamespace".

有没有办法将JAX-WS(Metro实现)配置"mynamespace"为默认用作targetNamespace?

我想使用没有任何属性的注释,并删除重复的声明,就像约定优于配置.

Pau*_*gas 3

仅将其放在服务端点接口或服务实现 beantargetNamespace中。

/**
* Annotated Implementation Object
*/
@WebService(
    name = "CustomerService",
    targetNamespace = "http://org.company.services"
)
public class CustomerService {
    @WebMethod
    @WebResult(name="CustomerRecord")
    public CustomerRecord locateCustomer(
        @WebParam(name="FirstName") String firstName,
        @WebParam(name="LastName") String lastName,
        @WebParam(name="Address") USAddress addr) {
        ...
    }
};
Run Code Online (Sandbox Code Playgroud)

如果@WebResult或@WebParam没有targetNamespace,则默认targetNamespace为 Web 服务的 。

另一方面,您可以避免使用所有注释,并且仅@WebService在不需要 JAX-B 的自定义内容时才使用。

更多信息请参见JSR-181 JavaTM 平台的 Web 服务元数据

  • 当我在“@WebResult”和“@WebParam”处省略“targetNamespace”时,SOAP 响应中生成的 XML 具有最外层 XML 标记的命名空间(例如“<ns0:locateCustomerResponse>”),但内部标记使用默认命名空间(例如“<CustomerRecord>”)。参数也会发生同样的情况(“<firstName>”而不是“<ns0:firstName>”)。 (8认同)