Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I configure the target namespace globally in JAX-WS web services?

I have a lot of endpoints annotated with @WebService(targetNamespace = "mynamespace"). Every @WebResult and @WebParam has the same definition of targetNamespace = "mynamespace".

Is there a way to configure JAX-WS (Metro implementation) to use "mynamespace" as targetNamespace by default?

I would like to use the annotations without any attributes and get rid of the duplicate declarations, just like convention over configuration.

like image 419
timomeinen Avatar asked Jun 04 '13 10:06

timomeinen


1 Answers

Only put the targetNamespace in the service endpoint interface or service implementation bean.

/**
* 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) {
        ...
    }
};

If @WebResult or @WebParam have no targetNamespace, the default is the targetNamespace for the Web Service.

In another hand, you can avoid the all annotations and only use the @WebService if you don't need something custom with JAX-B.

See more in JSR-181 Web Services Metadata for the JavaTM Platform

like image 103
Paul Vargas Avatar answered Nov 06 '22 07:11

Paul Vargas