For JAX-WS applications, you can enable WS-Addressing support
during development of a service application, by using addressing annotations
in the code. You can also use this method in a client application
that uses an injected web service proxy reference.
About this task
Use one of the following addressing annotations in your
service code:
- Addressing - use this annotation if you want
to use the 2005/08 WS-Addressing specification.
- SubmissionAddressing - use this annotation
if you want to use the 2004/08 WS-Addressing specification.
On clients, use the Addressing annotation only; the SubmissionAddressing
annotation is not supported. You must specify the Addressing annotation
in combination with the WebServiceRef annotation. The WebServiceRef
annotation specifies a reference to the web service proxy that is
injected by the client container.
Annotation settings override
settings in the WSDL document. Annotation settings might differ from
WSDL settings if you create the WSDL document manually rather than
generating it from the code.
Specify up to three optional parameters
for each annotation:
Table 1. Parameters
for the addressing annotations. The table lists the different
parameters with their possible values and a description of each one.Parameter name |
Possible values |
Description |
enabled |
true (default)
false
|
Whether WS-Addressing support is enabled. |
required |
true
false (default)
|
Whether WS-Addressing headers are required. |
responses |
Responses.All (default)
Responses.ANONYMOUS
Responses.NON_ANONYMOUS
|
Whether to use a synchronous or an asynchronous
message exchange pattern. Specify Responses.ANONYMOUS to
send messages in a synchronous message pattern; use Responses.NON_ANONYMOUS to
send messages in an asynchronous message exchange pattern. Note: This
parameter is not supported on the SubmissionAddressing annotation.
|
Note: You can use the Addressing annotation
only with a SOAP (1.1 or 1.2) over HTTP binding. If you use the class
with another binding, such as XML over HTTP, an exception is thrown
on clients, and on servers the web service fails to deploy.
Procedure
- To modify the behavior of the WS-Addressing support programmatically
in the service application, use one of the addressing annotations,
with optional parameters as required, in the code. In
the following example, the Addressing annotation
is used with no parameters, so the default settings apply.
import javax.xml.ws.soap.Addressing;
@Addressing
@WebService(endpointInterface =
"org.apache.axis2.jaxws.calculator.Calculator",
serviceName = "CalculatorService",
portName = "CalculatorServicePort",
targetNamespace = "http://calculator.jaxws.axis2.apache.org")
In
the following example, the SubmissionAddressing annotation
is used with parameters that specify that WS-Addressing is enabled
and required. The responses attribute is not supported
on this annotation.import com.ibm.websphere.wsaddressing.jaxws21.SubmissionAddressing;
@SubmissionAddressing(enabled=true, required=true)
@WebService(endpointInterface =
"org.apache.axis2.jaxws.calculator.Calculator",
serviceName = "CalculatorService",
portName = "CalculatorServicePort",
targetNamespace = "http://calculator.jaxws.axis2.apache.org")
- To enable WS-Addressing support on clients that use an
injected web service proxy reference, use the Addressing annotation,
with optional parameters as required, in combination with the WebServiceRef
annotation. The SubmissionAddressing annotation is not supported for
this method.
For example, the following code fragment
specifies that WS-Addressing is enabled and that the synchronous message
exchange pattern is used:
public class MyClientApplication {
// Enable Addressing for a port-component-ref resource injection.
@Addressing(enabled=true, responses=Responses.ANONYMOUS)
@WebServiceRef(MyService.class)
private MyPortType myPort;
...
}
Results
If you use an addressing annotation in the service application,
the server processes any WS-Addressing headers that conform to the
relevant specification in inbound SOAP messages. If you specify that
WS-Addressing is required, and an inbound SOAP message does not include
any WS-Addressing headers, or includes WS-Addressing headers that
do not conform to the specification indicated by the annotation, the
server returns a fault message. For example, if a client sends a message
that includes 2004/08 WS-Addressing headers, and the server requires
2005/08 headers, the server returns a fault message.
If you
use the Addressing annotation and generate a WSDL document from the
code, a UsingAddressing element and WS-Policy assertions
are created in the WSDL document. Clients that use this WSDL document
will include WS-Addressing information in their messages. The SubmissionAddressing annotation
is not understood by current WSDL generation tools. However, the WSDL
document does not distinguish between the 2005/08 specification and
the 2004/08 specification, so if you want to generate a WSDL document
from code that contains a SubmissionAddressing annotation,
use both the Addressing and SubmissionAddressing annotations
together.
If you specify the responses attribute, the corresponding
message exchange pattern will be used.