Programming Web Services for WebLogic Server

     Previous  Next    Open TOC in new window  Open Index in new window  View as PDF - New Window  Get Adobe Reader - New Window
Content starts here

JWS Annotation Reference

The following sections provide reference documentation about standard (JSR-181) and WebLogic-specific JWS annotations:

 


Overview of JWS Annotation Tags

The WebLogic Web Services programming model uses the new JDK 5.0 metadata annotations feature (specified by JSR-175). In this programming model, you create an annotated Java file and then use Ant tasks to compile the file into the Java source code and generate all the associated artifacts.

The Java Web Service (JWS) annotated file is the core of your Web Service. It contains the Java code that determines how your Web Service behaves. A JWS file is an ordinary Java class file that uses annotations to specify the shape and characteristics of the Web Service. The JWS annotations you can use in a JWS file include the standard ones defined by the Web Services Metadata for the Java Platform specification (JSR-181) as well as a set of WebLogic-specific ones. This chapter provides reference information about both of these set of annotations.

You can target a JWS annotation at either the class-, method- or parameter-level in a JWS file. Some annotations can be targeted at more than one level, such as @SecurityRoles that can be targeted at both the class- and method-level. The documentation in this section lists the level to which you can target each annotation.

The following example shows a simple JWS file that uses both standard JSR-181 and WebLogic-specific JWS annotations, shown in bold:

package examples.webservices.complex;
// Import the standard JWS annotation interfaces
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
// Import the WebLogic-specific JWS annotation interface
import weblogic.jws.WLHttpTransport;
// Import the BasicStruct JavaBean
import examples.webservices.complex.BasicStruct;
// Standard JWS annotation that specifies that the portType name of the Web
// Service is "ComplexPortType", its public service name is "ComplexService",
// and the targetNamespace used in the generated WSDL is "http://example.org"
@WebService(serviceName="ComplexService", name="ComplexPortType",
targetNamespace="http://example.org")
// Standard JWS annotation that specifies this is a document-literal-wrapped
// Web Service
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
// WebLogic-specific JWS annotation that specifies the context path and service
// URI used to build the URI of the Web Service is "complex/ComplexService"
@WLHttpTransport(contextPath="complex", serviceUri="ComplexService",
portName="ComplexServicePort")
/**
* This JWS file forms the basis of a WebLogic Web Service. The Web Services
* has two public operations:
*
* - echoInt(int)
* - echoComplexType(BasicStruct)
*
* The Web Service is defined as a "document-literal" service, which means
* that the SOAP messages have a single part referencing an XML Schema element
* that defines the entire body.
*
* @author Copyright (c) 2005 by BEA Systems. All Rights Reserved.
*/
public class ComplexImpl {
  // Standard JWS annotation that specifies that the method should be exposed
// as a public operation. Because the annotation does not include the
// member-value "operationName", the public name of the operation is the
// same as the method name: echoInt.
//
// The WebResult annotation specifies that the name of the result of the
// operation in the generated WSDL is "IntegerOutput", rather than the
// default name "return". The WebParam annotation specifies that the input
// parameter name in the WSDL file is "IntegerInput" rather than the Java
// name of the parameter, "input".
  @WebMethod()
@WebResult(name="IntegerOutput",
targetNamespace="http://example.org/complex")
public int echoInt(
@WebParam(name="IntegerInput",
targetNamespace="http://example.org/complex")
int input)
{
System.out.println("echoInt '" + input + "' to you too!");
return input;
}
  // Standard JWS annotation to expose method "echoStruct" as a public operation
// called "echoComplexType"
// The WebResult annotation specifies that the name of the result of the
// operation in the generated WSDL is "EchoStructReturnMessage",
// rather than the default name "return".
  @WebMethod(operationName="echoComplexType")
@WebResult(name="EchoStructReturnMessage",
targetNamespace="http://example.org/complex")
public BasicStruct echoStruct(BasicStruct struct)
{
System.out.println("echoComplexType called");
return struct;
}
}

 


Standard JSR-181 JWS Annotations Reference

The Web Services Metadata for the Java Platform (JSR-181) specification defines the standard annotations you can use in your JWS file to specify the shape and behavior of your Web Service. This section briefly describes each annotation, along with its attributes. See Programming the JWS File, for examples. For more detailed information about the annotations, such as the Java annotation type definition and additional examples, see the specification.

This section documents the following standard JWS annotations:

javax.jws.WebService

Description

Target: Class

Specifies that the JWS file implements a Web Service.

Attributes

Table B-1 Attributes of the javax.jws.WebService JWS Annotation
Name
Description
Data Type
Required?
name
Name of the Web Service. Maps to the <wsdl:portType> element in the WSDL file.
Default value is the unqualified name of the Java class in the JWS file.
String
No.
targetNamespace
The XML namespace used for the WSDL and XML elements generated from this Web Service.
The default value is specified by the JAX-RPC specification.
String.
No.
serviceName
Service name of the Web Service. Maps to the <wsdl:service> element in the WSDL file.
Default value is the unqualified name of the Java class in the JWS file, appended with the string Service.
String
No.
wsdlLocation
Relative or absolute URL of a pre-defined WSDL file. If you specify this attribute, the jwsc Ant task does not generate a WSDL file, and returns an error if the JWS file is inconsistent with the port types and bindings in the WSDL file.

Note: The wsdlc Ant task uses this attribute when it generates the endpoint interface JWS file from a WSDL. Typically, users never use the attribute in their own JWS files.

String.
No.
endpointInterface
Fully qualified name of an existing service endpoint interface file. If you specify this attribute, it is assumed that you have already created the endpoint interface file and it is in your CLASSPATH.
String.
No.

Example

@WebService(name="JMSTransportPortType",
serviceName="JMSTransportService",
targetNamespace="http://example.org")

javax.jws.WebMethod

Description

Target: Method

Specifies that the method is exposed as a public operation of the Web Service. You must explicitly use this annotation to expose a method; if you do not specify this annotation, the method by default is not exposed.

Attributes

Table B-2 Attributes of the javax.jws.WebMethod JWS Annotation
Name
Description
Data Type
Required?
operationName
Name of the operation. Maps to the <wsdl:operation> element in the WSDL file.
Default value is the name of the method.
String
No.
action
The action for this operation. For SOAP bindings, the value of this attribute determines the value of the SOAPAction header in the SOAP messages.
String
No.

Example

 @WebMethod(operationName="echoComplexType")
 public BasicStruct echoStruct(BasicStruct struct)
{
...
}

javax.jws.Oneway

Description

Target: Method

Specifies that the method has only input parameters, but does not return a value. This annotation must be used only in conjunction with the @WebMethod annotation.

It is an error to use this annotation on a method that returns anything other than void, takes a Holder class as an input parameter, or throws checked exceptions.

This annotation does not have any attributes.

Example

  @WebMethod()
@Oneway()
public void helloWorld(String input) {
...
  }

javax.jws.WebParam

Description

Target: Parameter

Customizes the mapping between operation input parameters of the Web Service and elements of the generated WSDL file. Also used to specify the behavior of the parameter.

Attributes

Table B-3 Attributes of the javax.jws.WebParam JWS Annotation
Name
Description
Data Type
Required?
name
Name of the parameter in the WSDL file.
For RPC-style Web Services, the name maps to the <wsdl:part> element that represents the parameter. For document-style Web Services, the name is the local name of the XML element that represents the parameter.
The default value is the name of the method’s parameter.
String
No.
targetNamespace
The XML namespace of the parameter. This value is used only used for document-style Web Services, in which the parameter maps to an XML element.
The default value is the targetNamespace of the Web Service.
String
No.
mode
The direction in which the parameter is flowing.
Valid values are:
  • WebParam.Mode.IN
  • WebParam.Mode.OUT
  • WebParam.Mode.INOUT
Default value is WebParam.Mode.IN.
If you specify WebParam.Mode.OUT or WebParam.Mode.INOUT, then the data type of the parameter must be Holder, or extend Holder. For details, see the JAX-RPC specification.
WebParam.Mode.OUT and WebParam.Mode.INOUT modes are only supported for RPC-style Web Services or for parameters that map to headers.
enum
No.
header
Specifies whether the value of the parameter is found in the SOAP header. By default parameters are in the SOAP body.
Valid values are true and false. Default value is false.
boolean
No.

Example

 @WebMethod()
public int echoInt(
@WebParam(name="IntegerInput",
targetNamespace="http://example.org/complex")
int input)
{
...
}

javax.jws.WebResult

Description

Target: Method

Customizes the mapping between the Web Service operation return value and the corresponding element of the generated WSDL file.

Attributes

Table B-4 Attributes of the javax.jws.WebResult JWS Annotation
Name
Description
Data Type
Required?
name
Name of the parameter in the WSDL file.
For RPC-style Web Services, the name maps to the <wsdl:part> element that represents the return value. For document-style Web Services, the name is the local name of the XML element that represents the return value.
The default value is the hard-coded name result.
String
No.
targetNamespace
The XML namespace of the return value. This value is used only used for document-style Web Services, in which the return value maps to an XML element.
The default value is the targetNamespace of the Web Service.
String
No.

Example

  @WebMethod(operationName="echoComplexType")
@WebResult(name="EchoStructReturnMessage",
targetNamespace="http://example.org/complex")
public BasicStruct echoStruct(BasicStruct struct)
{
...
}

javax.jws.HandlerChain

Description

Target: Class

Associates a Web Service with an external file that contains the configuration of a handler chain. The configuration includes the list of handlers in the chain, the order in which they execute, the initialization parameters, and so on.

Use the @HandlerChain annotation, rather than the @SOAPMessageHandlers annotation, in your JWS file if:

It is an error to combine this annotation with the @SOAPMessageHandlers annotation.

For the XML Schema of the external configuration file, additional information about creating it, and additional examples, see the Web Services Metadata for the Java Platform specification.

Attributes

Table B-5 Attributes of the javax.jws.HandlerChain JWS Annotation
Name
Description
Data Type
Required?
file
URL, either relative or absolute, of the handler chain configuration file. Relative URLs are relative to the location of JWS file.
String
Yes
name
Name of the handler chain (in the configuration file pointed to by the file attribute) that you want to associate with the Web Service.
String
Yes.

Example

package examples.webservices.handler;
...
@WebService (...)
@HandlerChain(file="HandlerConfig.xml", name="SimpleChain")
public class HandlerChainImpl {
...
}

javax.jws.soap.SOAPBinding

Description

Target: Class

Specifies the mapping of the Web Service onto the SOAP message protocol.

Attributes

Table B-6 Attributes of the javax.jws.soap.SOAPBinding JWS Annotation
Name
Description
Data Type
Required?
style
Specifies the message style of the request and response SOAP messages.
Valid values are:
  • SOAPBinding.Style.RPC
  • SOAPBinding.Style.DOCUMENT.
Default value is SOAPBinding.Style.DOCUMENT.
enum
No.
use
Specifies the formatting style of the request and response SOAP messages.
Valid values are:
  • SOAPBinding.Use.LITERAL
  • SOAPBinding.Use.ENCODED
Default value is SOAPBinding.Use.LITERAL.
enum
No.
parameterStyle
Determines whether method parameters represent the entire message body, or whether the parameters are elements wrapped inside a top-level element named after the operation.
Valid values are:
  • SOAPBinding.ParameterStyle.BARE
  • SOAPBinding.ParameterStyle.WRAPPED
Default value is SOAPBinding.ParameterStyle.WRAPPED

Note: This attribute applies only to Web Services of style document-literal. Or in other words, you can specify this attribute only if you have also set the style attribute to SOAPBinding.Style.DOCUMENT and the use attribute to SOAPBinding.Use.LITERAL.

enum
No.

Example

package examples.webservices.bindings;
...
@WebService (...)
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,
use=SOAPBinding.Use.LITERAL,
parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class BindingsImpl {
...
}

javax.jws.soap.SOAPMessageHandler

Description

Target: None; this annotation can be used only inside of a @SOAPMessageHandler array.

Specifies a particular SOAP message handler in a @SOAPMessageHandler array. The annotation includes attributes to specify the class name of the handler, the initialization parameters, list of SOAP headers processed by the handler, and so on.

Attributes

Table B-7 Attributes of the javax.jws.soap.SOAPMessageHandler JWS Annotation
Name
Description
Data Type
Required?
name
Name of the SOAP message handler.
The default value is the name of the class that implements the Handler interface (or extends the GenericHandler abstract class.)
String
No.
className
Name of the handler class.
String
Yes.
initParams
Array of name/value pairs that is passed to the handler class during initialization.
Array of @InitParam
No.
roles
List of SOAP roles implemented by the handler.
Array of String
No.
headers
List of SOAP headers processed by the handler.
Each element in this array contains a QName which defines the header element processed by the handler.
Array of String
No.

Example

package examples.webservices.handlers;
...
@WebService (...)
@SOAPMessageHandlers ( {
@SOAPMessageHandler (
className="examples.webservices.soap_handlers.simple.ServerHandler1"),
@SOAPMessageHandler (
className="examples.webservices.soap_handlers.simple.ServerHandler2")
} )
public class HandlersImpl {
...
}

javax.jws.soap.InitParam

Description

Target: None; this annotation can be used only as a value to the initParams attribute of the @SOAPMessageHandler annotation.

Use this annotation in the initParams attribute of the @SOAPMessageHandler annotation to specify the array of parameters (name/value pairs) that are passed to a handler class during initialization.

Attributes

Table B-8 Attributes of the javax.jws.soap.InitParam JWS Annotation
Name
Description
Data Type
Required?
name
Name of the initialization parameter.
String
Yes.
value
Value of the initialization parameter.
String
Yes.

javax.jws.soap.SOAPMessageHandlers

Description

Target: Class

Specifies an array of SOAP message handlers that execute before and after the operations of a Web Service. Use the @SOAPMessageHandler annotation to specify a particular handler. Because you specify the list of handlers within the JWS file itself, the configuration of the handler chain is embedded within the Web Service.

Use the @SOAPMessageHandlers annotation, rather than @HandlerChain, if:

The @SOAPMessageHandlers annotation is an array of @SOAPMessageHandler types. The handlers run in the order in which they appear in the annotation, starting with the first handler in the array.

This annotation does not have any attributes.

Example

package examples.webservices.handlers;
...
@WebService (...)
@SOAPMessageHandlers ( {
@SOAPMessageHandler (
className="examples.webservices.soap_handlers.simple.ServerHandler1"),
@SOAPMessageHandler (
className="examples.webservices.soap_handlers.simple.ServerHandler2")
} )
public class HandlersImpl {
...
}

 


WebLogic-Specific JWS Annotations Reference

WebLogic Web Services define a set of JWS annotations that you can use to specify behavior and features in addition to the standard JSR-181 JWS annotations. In particular, the WebLogic-specific annotations are:

weblogic.jws.AsyncFailure

Description

Target: Method

Specifies the method that handles a potential failure when the main JWS file invokes an operation of another Web Service asynchronously.

When you invoke, from within a JWS file, a Web Service operation asynchronously, the response (or exception, in the case of a failure) does not return immediately after the operation invocation, but rather, at some later point in time. Because the operation invocation did not wait for a response, a separate method in the JWS file must handle the response when it does finally return; similarly, another method must handle a potential failure. Use the @AsyncFailure annotation to specify the method in the JWS file that will handle the potential failure of an asynchronous operation invocation.

The @AsyncFailure annotation takes two parameters: the name of the JAX-RPC stub for the Web Service you are invoking and the name of the operation that you are invoking asynchronously. The JAX-RPC stub is the one that has been annotation with the @ServiceClient annotation.

The method that handles the asynchronous failure must follow these guidelines:

Within the method itself you can get more information about the method failure from the context, and query the specific type of exception and act accordingly.

Typically, you always use the @AsyncFailure annotation to explicitly specify the method that handles asynchronous operation failures. The only time you would not use this annotation is if you want a single method to handle failures for two or more stubs that invoke different Web Services. In this case, although the stubs connect to different Web Services, each Web Service must have a similarly named method, because the Web Services runtime relies on the name of the method (onMethodNameAsyncFailure) to determine how to handle the asynchronous failure, rather than the annotation. However, if you always want a one-to-one correspondence between a stub and the method that handles an asynchronous failure from one of the operations, then BEA recommends that you explicitly use @AsyncFailure.

See Invoking a Web Service Using Asynchronous Request-Response for detailed information and examples of using this annotation.

Attributes

Table B-9 Attributes of the weblogic.jws.AsyncFailure JWS Annotation Tag
Name
Description
Data Type
Required?
target
The name of the JAX-RPC stub of the Web Service for which you want to invoke an operation asynchronously.
The stub is the one that has been annotated with the @ServiceClient field-level annotation.
String
Yes
operation
The name of the operation that you want to invoke asynchronously.
This is the actual name of the operation, as it appears in the WSDL file. When you invoke this operation in the main code of the JWS file, you add Async to its name.
For example, if set operation="getQuote", then in the JWS file you invoke it asynchronously as follows:
 port.getQuoteAsync (apc, symbol);
String
Yes.

Example

The following sample snippet shows how to use the @AsyncFailure annotation in a JWS file that invokes the operation of another Web Service asynchronously; only the relevant Java code is included:

package examples.webservices.async_req_res;
...
public class StockQuoteClientImpl {
  @ServiceClient(wsdlLocation="http://localhost:7001/async/StockQuote?WSDL",
serviceName="StockQuoteService", portName="StockQuote")
private StockQuotePortType port;
  @WebMethodpublic void getQuote (String symbol) {
    AsyncPreCallContext apc = AsyncCallContextFactory.getAsyncPreCallContext();
apc.setProperty("symbol", symbol);
    try {
port.getQuoteAsync(apc, symbol );
System.out.println("in getQuote method of StockQuoteClient WS");
}
catch (RemoteException e) {
e.printStackTrace();
}
  }
...
  @AsyncFailure(target="port", operation="getQuote")
public void onGetQuoteAsyncFailure(AsyncPostCallContext apc, Throwable e) {
System.out.println("-------------------");
e.printStackTrace();
System.out.println("-------------------");
}
}

The example shows a JAX-RPC stub called port, used to invoke the Web Service located at http://localhost:7001/async/StockQuote. The getQuote operation is invoked asynchronously, and any exception from this invocation is handled by the onGetQuoteAsyncFailure method, as specified by the @AsyncFailure annotation.

weblogic.jws.AsyncResponse

Description

Target: Method

Specifies the method that handles the response when the main JWS file invokes an operation of another Web Service asynchronously.

When you invoke, from within a JWS file, a Web Service operation asynchronously, the response does not return immediately after the operation invocation, but rather, at some later point in time. Because the operation invocation did not wait for a response, a separate method in the JWS file must handle the response when it does finally return. Use the @AsyncResponse annotation to specify the method in the JWS file that will handle the response of an asynchronous operation invocation.

The @AsyncResponse annotation takes two parameters: the name of the JAX-RPC stub for the Web Service you are invoking and the name of the operation that you are invoking asynchronously. The JAX-RPC stub is the one that has been annotation with the @ServiceClient annotation.

The method that handles the asynchronous response must follow these guidelines:

Within the asynchronous-response method itself you add the code to handle the response. You can also get more information about the method invocation from the context.

Typically, you always use the @AsyncResponse annotation to explicitly specify the method that handles asynchronous operation responses. The only time you would not use this annotation is if you want a single method to handle the response for two or more stubs that invoke different Web Services. In this case, although the stubs connect to different Web Services, each Web Service must have a similarly named method, because the Web Services runtime relies on the name of the method (onMethodNameAsyncResponse) to determine how to handle the asynchronous response, rather than the annotation. However, if you always want a one-to-one correspondence between a stub and the method that handles an asynchronous response from one of the operations, then BEA recommends that you explicitly use @AsyncResponse.

See Invoking a Web Service Using Asynchronous Request-Response for detailed information and examples of using this annotation.

Attributes

Table B-10 Attributes of the weblogic.jws.AsyncResponse JWS Annotation Tag
Name
Description
Data Type
Required?
target
The name of the JAX-RPC stub of the Web Service for which you want to invoke an operation asynchronously.
The stub is the one that has been annotated with the @ServiceClient field-level annotation.
String
Yes
operation
The name of the operation that you want to invoke asynchronously.
This is the actual name of the operation, as it appears in the WSDL file. When you invoke this operation in the main code of the JWS file, you add Async to its name.
For example, if set operation="getQuote", then in the JWS file you invoke it asynchronously as follows:
 port.getQuoteAsync (apc, symbol);
String
Yes.

Example

The following sample snippet shows how to use the @AsyncResponse annotation in a JWS file that invokes the operation of another Web Service asynchronously; only the relevant Java code is included:

package examples.webservices.async_req_res;
...
public class StockQuoteClientImpl {
  @ServiceClient(wsdlLocation="http://localhost:7001/async/StockQuote?WSDL",
serviceName="StockQuoteService", portName="StockQuote")
private StockQuotePortType port;
  @WebMethodpublic void getQuote (String symbol) {
    AsyncPreCallContext apc = AsyncCallContextFactory.getAsyncPreCallContext();
apc.setProperty("symbol", symbol);
    try {
port.getQuoteAsync(apc, symbol );
System.out.println("in getQuote method of StockQuoteClient WS");
}
catch (RemoteException e) {
e.printStackTrace();
}
  }
...
  @AsyncResponse(target="port", operation="getQuote")
public void onGetQuoteAsyncResponse(AsyncPostCallContext apc, int quote) {
System.out.println("-------------------");
System.out.println("Got quote " + quote );
System.out.println("-------------------");
}
}

The example shows a JAX-RPC stub called port, used to invoke the Web Service located at http://localhost:7001/async/StockQuote. The getQuote operation is invoked asynchronously, and the response from this invocation is handled by the onGetQuoteAsyncResponse method, as specified by the @AsyncResponse annotation.

weblogic.jws.Binding

Description

Target: Class

Specifies whether the Web Service uses version 1.1 or 1.2 of the Simple Object Access Protocol (SOAP) implementation when accepting or sending SOAP messages. By default, WebLogic Web Services use SOAP 1.1.

Attributes

Table B-11 Attributes of the weblogic.jws.Binding JWS Annotation Tag
Name
Description
Data Type
Required?
value
Specifies the version of SOAP used in the request and response SOAP messages when the Web Service is invoked.
Valid values for this attribute are:
  • Type.SOAP11
  • Type.SOAP12
The default value is Type.SOAP11.
enum
No

Example

The following example shows how to specify SOAP 1.2; only the relevant code is shown:

package examples.webservices.soap12;
...
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.Binding;
@WebService(name="SOAP12PortType",
serviceName="SOAP12Service",
targetNamespace="http://example.org")
@Binding(Binding.Type.SOAP12)
public class SOAP12Impl {
  @WebMethod()
public String sayHello(String message) {
...
  }
}

weblogic.jws.BufferQueue

Description

Target: Class

Specifies the JNDI name of the JMS queue to which WebLogic Server:

When used with buffered Web Services, you use this annotation in conjunction with @MessageBuffer, which specifies the methods of a JWS that are buffered. When used with reliable Web Services, you use this annotation in conjunction with @Policy, which specifies the reliable messaging WS-Policy file associated with the Web Service.

If you have enabled buffering or reliable messaging for a Web Service, but do not specify the @BuffereQueue annotation, WebLogic Server uses the default Web Services JMS queue (weblogic.wsee.DefaultQueue) to store buffered or reliable operation invocations. This JMS queue is also the default queue for the JMS transport features. It is assumed that you have already created this JMS queue if you intend on using it for any of these features.

See Creating Buffered Web Services and Using Web Service Reliable Messaging for detailed information and examples of creating buffered or reliable Web Services.

Attributes

Table B-12 Attributes of the weblogic.jws.BufferQueue JWS Annotation Tag
Name
Description
Data Type
Required?
name
The JNDI name of the JMS queue to which the buffered or reliable operation invocation is queued.
String
Yes

Example

The following example shows a code snippet from a JWS file in which the public operation is buffered and the JMS queue to which WebLogic Server queues the operation invocation is called my.buffere.queue; only the relevant Java code is shown:

package examples.webservices.buffered;
...
@WebService(name="BufferedPortType",
serviceName="BufferedService",
targetNamespace="http://example.org")
@BufferQueue(name="my.buffer.queue")
public class BufferedImpl {
...
  @WebMethod()
@MessageBuffer(retryCount=10, retryDelay="10 seconds")
@Oneway()
public void sayHelloNoReturn(String message) {
System.out.println("sayHelloNoReturn: " + message);
}
}

weblogic.jws.Callback

Description

Target: Field

Specifies that the annotated variable is a callback, which means that you can use the variable to send callback events back to the client Web Service that invoked an operation of the target Web Service.

You specify the @Callback annotation in the target Web Service so that it can call back to the client Web Service. The data type of the annotated variable is the callback interface.

The callback feature works between two WebLogic Web Services. When you program the feature, however, you create the following three Java files:

See Using Callbacks to Notify Clients of Events for additional overview and procedural information about programming callbacks.

The @Callback annotation does not have any attributes.

Example

The following example shows a very simple target Web Service in which a variable called callback is annotated with the @Callback annotation. The data type of the variable is CallbackInterface; this means a callback Web Service must exist with this name. After the variable is injected with the callback information, you can invoke the callback methods defined in CallbackInterface; in the example, the callback method is callbackOperation().

The text in bold shows the relevant code:

package examples.webservices.callback;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.Callback;
import javax.jws.WebService;
import javax.jws.WebMethod;
@WebService(name="CallbackPortType",
serviceName="TargetService",
targetNamespace="http://examples.org/")
@WLHttpTransport(contextPath="callback",
serviceUri="TargetService",
portName="TargetServicePort")
public class TargetServiceImpl {
  @Callback
CallbackInterface callback;
  @WebMethod
public void targetOperation (String message) {
        callback.callbackOperation (message);
  }
}

weblogic.jws.CallbackMethod

Description

Target: Method

Specifies the method in the client Web Service that handles the messages it receives from the callback Web Service. Use the attributes to link the callback message handler methods in the client Web Service with the callback method in the callback interface.

The callback feature works between two WebLogic Web Services. When you program the feature, however, you create the following three Java files:

See Using Callbacks to Notify Clients of Events for additional overview and procedural information about programming callbacks.

Attributes

Table B-13 Attributes of the weblogic.jws.CallbackMethod JWS Annotation Tag
Name
Description
Data Type
Required?
operation
Specifies the name of the callback method in the callback interface for which this method will handle callback messages.
String
Yes
target
Specifies the name of the JAX-RPC stub for which you want to receive callbacks.
The stub is the one that has been annotated with the @ServiceClient field-level annotation.
String
Yes

Example

The following example shows a method of a client Web Service annotated with the @CallbackMethod annotation. The attributes show that a variable called port must have previously been injected with JAX-RPC stub information and that the annotated method will handle messages received from a callback operation called callbackOperation().

  @CallbackMethod(target="port", operation="callbackOperation")
@CallbackRolesAllowed(@SecurityRole(role="engineer", mapToPrincipals="shackell"))
public void callbackHandler(String msg) {
        System.out.println (msg);
  }

weblogic.jws.CallbackService

Description

Target: Class

Specifies that the JWS file is actually a Java interface that describes a callback Web Service. This annotation is analogous to the @javax.jws.WebService, but specific to callbacks and with a reduced set of attributes.

The callback feature works between two WebLogic Web Services. When you program the feature, however, you create the following three Java files:

Use the @CallbackInterface annotation to specify that the Java file is a callback interface file.

When you program the callback interface, you specify one or more callback methods; as with standard non-callback Web Services, you annotate these methods with the @javax.jws.WebMethod annotation to specify that they are Web Service operations. However, contrary to non-callback methods, you never write the actual implementation code for these callback methods; rather, when you compile the client Web Service with the jwsc Ant task, the task automatically creates an implementation of the interface and packages it into a Web Service. This generated implementation specifies that the callback methods all do the same thing: send a message from the target Web Service that invokes the callback method back to the client Web Service.

See Using Callbacks to Notify Clients of Events for additional overview and procedural information about programming callbacks.

Attributes

Table B-14 Attributes of the weblogic.jws.CallbackService JWS Annotation Tag
Name
Description
Data Type
Required?
name
Name of the callback Web Service. Maps to the <wsdl:portType> element in the WSDL file.
Default value is the unqualified name of the Java class in the JWS file.
String
No.
serviceName
Service name of the callback Web Service. Maps to the <wsdl:service> element in the WSDL file.
Default value is the unqualified name of the Java class in the JWS file, appended with the string Service.
String
No.

Example

The following example shows a very simple callback interface. The resulting callback Web Service has one callback method, callbackOperation().

package examples.webservices.callback;
import weblogic.jws.CallbackService;
import javax.jws.Oneway;
import javax.jws.WebMethod;
@CallbackService
public interface CallbackInterface {
  @WebMethod
@Oneway
public void callbackOperation (String msg);
}

weblogic.jws.Context

Description

Target: Field

Specifies that the annotated field provide access to the runtime context of the Web Service.

When a client application invokes a WebLogic Web Service that was implemented with a JWS file, WebLogic Server automatically creates a context that the Web Service can use to access, and sometimes change, runtime information about the service. Much of this information is related to conversations, such as whether the current conversation is finished, the current values of the conversational properties, changing conversational properties at runtime, and so on. Some of the information accessible via the context is more generic, such as the protocol that was used to invoke the Web Service (HTTP/S or JMS), the SOAP headers that were in the SOAP message request, and so on. The data type of the annotation field must be weblogic.wsee.jws.JwsContext, which is a WebLogic Web Service API that includes methods to query the context.

For additional information about using this annotation, see Accessing Runtime Information about a Web Service Using the JwsContext.

This annotation does not have any attributes.

Example

The following snippet of a JWS file shows how to use the @Context annotation; only parts of the file are shown, with relevant code in bold:

...
import weblogic.jws.Context;
import weblogic.wsee.jws.JwsContext;
...
public class JwsContextImpl {
  @Context
private JwsContext ctx;
  @WebMethod()
public String getProtocol() {
...

weblogic.jws.Conversation

Description

Target: Method

Specifies that a method annotated with the @Conversation annotation can be invoked as part of a conversation between two WebLogic Web Services or a stand-alone Java client and a conversational Web Service.

The conversational Web Service typically specifies three methods, each annotated with the @Conversation annotation that correspond to the start, continue, and finish phases of a conversation. Use the @Conversational annotation to specify, at the class level, that a Web Service is conversational and to configure properties of the conversation, such as the maximum idle time.

If the conversation is between two Web Services, the client service uses the @ServiceClient annotation to specify the wsdl, service name, and port of the invoked conversational service. In both the service and stand-alone client cases, the client then invokes the start, continue, and finish methods in the appropriate order to conduct a conversation.The only additional requirement to make a Web Service conversational is that it implement java.io.Serializable.

See Creating Conversational Web Services for detailed information and examples of using this annotation.

Attributes

Table B-15 Attributes of the weblogic.jws.Conversation JWS Annotation Tag
Name
Description
Data Type
Required?
value
Specifies the phase of a conversation that the annotated method implements.
Possible values are:
  • Phase.START
  • Specifies that the method starts a new conversation. A call to this method creates a new conversation ID and context, and resets its idle and age timer.

  • Phase.CONTINUE
  • Specifies that the method is part of a conversation in progress. A call to this method resets the idle timer. This method must always be called after the start method and before the finish method.

  • Phase.FINISH
  • Specifies that the method explicitly finishes a conversation in progress.

Default value is Phase.CONTINUE
enum
No.

Example

The following sample snippet shows a JWS file that contains three methods, start, middle, and finish) that are annotated with the @Conversation annotation to specify the start, continue, and finish phases, respectively, of a conversation.

...
public class ConversationalServiceImpl implements Serializable {
  @WebMethod
@Conversation (Conversation.Phase.START)
public String start() {
// Java code for starting a conversation goes here
}
  @WebMethod
@Conversation (Conversation.Phase.CONTINUE)
public String middle(String message) {
// Java code for continuing a conversation goes here
}
  @WebMethod
@Conversation (Conversation.Phase.FINISH)
public String finish(String message ) {
// Java code for finishing a conversation goes here
}
}

weblogic.jws.Conversational

Description

Target: Class

Specifies that a JWS file implements a conversational Web Service.

You are not required to use this annotation to specify that a Web Service is conversational; by simply annotating a single method with the @Conversation annotation, all the methods of the JWS file are automatically tagged as conversational. Use the class-level @Conversational annotation only if you want to change some of the conversational behavior or if you want to clearly show at the class level that the JWS if conversational.

If you do use the @Conversational annotation in your JWS file, you can specify it without any attributes if their default values suit your needs. However, if you want to change values such as the maximum amount of time that a conversation can remain idle, the maximum age of a conversation, and so on, specify the appropriate attribute.

See Creating Conversational Web Services for detailed information and examples of using this annotation.

Attributes

Table B-16 Attributes of the weblogic.jws.Conversational JWS Annotation Tag
Name
Description
Data Type
Required?
maxIdleTime
Specifies the amount of time that a conversation can remain idle before it is finished by WebLogic Server. Activity is defined by a client Web Service executing one of the phases of the conversation.
Valid values are a number and one of the following terms:
  • seconds
  • minutes
  • hours
  • days
  • years
For example, to specify a maximum idle time of ten minutes, specify the annotation as follows:
@Conversational(maxIdleTime="10 minutes")
If you specify a zero-length value (such as 0 seconds, or 0 minutes and so on), then the conversation never times out due to inactivity.
Default value is 0 seconds.
String
No.
maxAge
The amount of time that a conversation can remain active before it is finished by WebLogic Server.
Valid values are a number and one of the following terms:
  • seconds
  • minutes
  • hours
  • days
  • years
For example, to specify a maximum age of three days, specify the annotation as follows:
@Conversational(maxAge="3 days")
Default value is 1 day.
String
No
runAsStartUser
Specifies whether the continue and finish phases of an existing conversation are run as the user who started the conversation.
Typically, the same user executes the start, continue, and finish methods of a conversation, so that changing the value of this attribute has no effect. However, if you set the singlePrincipal attribute to false, which allows users different from the user who initiated the conversation to execute the continue and finish phases of an existing conversation, then the runAsStartUser attribute specifies which user the methods are actually “run as”: the user who initiated the conversation or the different user who executes subsequent phases of the conversation.
Valid values are true and false. Default value is false.
boolean
No.
singlePrincipal
Specifies whether users other than the one who started a conversation are allowed to execute the continue and finish phases of the conversation.
Typically, the same user executes all phases of a conversation. However, if you set this attribute to false, then other users can obtain the conversation ID of an existing conversation and use it to execute later phases of the conversation.
Valid values are true and false. Default value is false.
boolean
No

Example

The following sample snippet shows how to specify that a JWS file implements a conversational Web Service. The maximum amount of time the conversation can be idle is ten minutes, and the maximum age of the conversation, regardless of activity, is one day. The continue and finish phases of the conversation can be executed by a user other than the one that started the conversation; if this happens, then the corresponding methods are run as the new user, not the original user.

package examples.webservices.conversation;
...
@Conversational(maxIdleTime="10 minutes",
maxAge="1 day",
runAsStartUser=false,
singlePrincipal=false )
public class ConversationalServiceImpl implements Serializable {
...

weblogic.jws.MessageBuffer

Description

Target: Class, Method

Specifies which public methods of a JWS are buffered. If specified at the class-level, then all public methods are buffered; if you want only a subset of the methods to be buffered, specify the annotation at the appropriate method-level.

When a client Web Service invokes a buffered operation of a different WebLogic Web Service, WebLogic Server (hosting the invoked Web Service) puts the invoke message on a JMS queue and the actual invoke is dealt with later on when the WebLogic Server delivers the message from the top of the JMS queue to the Web Service implementation. The client does not need to wait for a response, but rather, continues on with its execution. For this reason, buffered operations (without any additional asynchronous features) can only return void and must be marked with the @Oneway annotation. If you want to buffer an operation that returns a value, you must use asynchronous request-response from the invoking client Web Service. See Invoking a Web Service Using Asynchronous Request-Response for more information.

Buffering works only between two Web Services in which one invokes the buffered operations of the other.

Use the optional attributes of @MessageBuffer to specify the number of times the JMS queue attempts to invoke the buffered Web Service operation until it is invoked successfully, and the amount of time between attempts.

Use the optional class-level @BufferQueue annotation to specify the JMS queue to which the invoke messages are queued. If you do not specify this annotation, the messages are queued to the default Web Service queue, weblogic.wsee.DefaultQueue.

See Creating Buffered Web Services for detailed information and examples for using this annotation.

Attributes

Table B-17 Attributes of the weblogic.jws.MessageBuffer JWS Annotation Tag
Name
Description
Data Type
Required?
retryCount
Specifies the number of times that the JMS queue on the invoked WebLogic Server instance attempts to deliver the invoking message to the Web Service implementation until the operation is successfully invoked.
Default value is 3.
int
No
retryDelay
Specifies the amount of time that elapses between message delivery retry attempts. The retry attempts are between the invoke message on the JMS queue and delivery of the message to the Web Service implementation.
Valid values are a number and one of the following terms:
  • seconds
  • minutes
  • hours
  • days
  • years
For example, to specify a retry delay of two days, specify:
@MessageBuffer(retryDelay="2 days")
Default value is 5 seconds.
String
No

Example

The following example shows a code snippet from a JWS file in which the public operation sayHelloNoReturn is buffered and the JMS queue to which WebLogic Server queues the operation invocation is called my.buffere.queue. The WebLogic Server instance that hosts the invoked Web Service tries a maximum of 10 times to deliver the invoke message from the JMS queue to the Web Service implementation, waiting 10 seconds between each retry. Only the relevant Java code is shown in the following snippet:

package examples.webservices.buffered;
...
@WebService(name="BufferedPortType",
serviceName="BufferedService",
targetNamespace="http://example.org")
@BufferQueue(name="my.buffer.queue")
public class BufferedImpl {
...
  @WebMethod()
@MessageBuffer(retryCount=10, ret