Network Deployment (Distributed operating systems), v8.0 > End-to-end paths > Web services
Develop a static web services client starting with a WSDL file
Tasks
- Obtain the WSDL document for the web service to access
- Develop JAX-WS client artifacts from a WSDL file
- Complete the client implementation
- Assemble a web services-enabled client JAR file into an EAR file. Optional
- Assemble a web services-enabled client WAR file into an EAR file. Optional
- Deploy the web services client application. Optional
- Test the web services-enabled client application
- Change the service endpoint. Optional.
- Implement extension to send and receive values in SOAP headers
- Implement extension to send and receive HTTP or JMS transport headers. Optional.
Managed clients
WAS v8 supports both managed and unmanaged web services clients when using JAX-WS:
Web services for Java EE clients are defined by JSR 109 and are managed clients because they run in a Java EE container. These clients are packaged as EAR files and contain components that act as service requesters. These components are comprised of a Java EE client application, a web component such as a servlet or JSP, or a session EJB. Web services managed clients use JSR 109 APIs and deployment information to look up and invoke a web service.
For the managed clients, you can use JNDI look up to perform service lookup, or you can use annotations to inject instances of a JAX-WS service or port. Read about setting up UserName token Web Services Security, digital signature Web Services Security and LTPA token Web Services Security. The following code is an example of a context lookup that is JSR 109 compliant:
InitialContext ctx = new InitialContext(); FredsBankService service =(FredsBankService)ctx.lookup("java:comp/env/service/FredsBankService"); FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();We can use the @WebServiceRef or @Resource annotation to declare managed clients. The usage of these annotations results in the type specified by the annotation being bound into the JNDI namespace. When the annotations are used on a field or method, they also result in injection of a JAX-WS service or port instance. You can use these annotations instead of declaring service-ref entries in the client deployment descriptor. We can still use the client deployment descriptor to declare JAX-WS managed clients, similar to JAX-RPC managed clients. We can also use the deployment descriptor to override and augment the information specified by @WebServiceRef and @Resource annotations. Use the @WebServiceRef annotation to bind and inject a JAX-WS service or port instance. We can only use the @Resource annotation to bind and inject a JAX-WS service instance. The use of either of these annotations to declare JAX-WS managed clients is only supported in certain class types. Some of these class types include JAX-WS endpoint implementation classes, JAX-WS handler classes, enterprise bean classes, and servlet classes.
Use the @WebServiceRef annotation to obtain an instance of FredsBank:
@WebServiceRef(name=”service/FredsBankPort”, value=FredsBankService.class) FredsBank fredsBank;Now within the class, the fredsBank field does not have to be initialized. We can use this field directly:long balance = fredsBank.getBalance();We can also use the @WebServiceRef annotation to obtain instances of JAX-WS service classes; for example:
@WebServiceRef(name=”service/FredsBankService”) FredsBankService service;Now within the class, the service field does not have to be initialized. We can use this field directly:
FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();In addition to the @WebServiceRef annotation, you can use the @Resource annotation to obtain an instance of JAX-WS service classes; for example:
@Resource(name=service/FredsBankService, type=FredsBankService.class) FredsBankService service;As with the @WebServiceRef annotation, you can now use the service field without instantiation; for example:
FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance();We can use the @Resource or @WebServiceRef annotations on a class. In this case, JNDI must be used to lookup the JAX-WS service or port; for example:
@WebServiceRef(name=”service/FredsBankService”, type=FredsBankService”) public class J2EEClientExample { … … public static void main(String[] args) { … … InitialContext ctx = new InitialContext(); FredsBankService service =(FredsBankService)ctx.lookup("java:comp/env/service/FredsBankService"); FredsBank fredsBank = service.getFredsBankPort(); long balance = fredsBank.getBalance(); } … }For more information on using the @WebServiceRef and @Resource annotations, see the specifications for JSR-109, JSR-224, JSR-250, and Java EE 5 (Java EE 5).
When using annotations or JNDI to obtain instances of JAX-WS services and ports, do not instantiate the returned objects. Doing so results in an unmanaged client instance. The following example shows an example of incorrect usage:
@WebServiceRef(name=”service/FredsBankService”) FredsBankService service; service = new FredsBankService(); // client becomes unmanaged.For JAX-WS managed clients that are declared by the @WebServiceRef or @Resource annotation and for clients that are declared using service-ref entries in the client deployment descriptor, you can use the admin console to supply the endpoint URL that the client uses. This specified URL overrides the endpoint URL in the WSDL document used by the client.
Unmanaged clients
Java SE 6 clients that use the JAX-WS runtime environment to invoke web services and do not run in any Java EE container are known as unmanaged clients. A web services unmanaged client is a stand-alone Java client that can directly inspect a WSDL file and formulate the calls to the web service by using JAX-WS APIs. These clients are packaged as JAR files, which do not contain any deployment information.
For transitioning users
Starting with WAS v7.0 and later, Java EE 5 application modules...
- Web application modules v2.5 or above
- EJB modules v3.0 or above
...are scanned for annotations to identify JAX-WS services and clients.
Pre-Java EE 5 application modules...
- Web application modules v2.4 or before
- EJB modules v2.1 or before
...are not scanned for JAX-WS annotations, by default, for performance considerations. In WAS v6.1 Feature Pack for Web Services, the default behavior during application installation is to...
- Scan pre-Java EE 5 web application modules to identify JAX-WS services
- Scan pre-Java EE 5 web application modules and EJB modules for web service clients
Because the default behavior for WAS V7.0 and later is to not scan pre-Java EE 5 modules for annotations during application installation or server startup, if you want to preserve backward compatability with the feature pack from previous releases, to request scanning during application installation and server startup, configure either...
- Set the property...
UseWSFEP61ScanPolicy
...in...
WAR_FILE/META-INF/MANIFEST.MF- Define the JVM custom property...
com.ibm.websphere.webservices.UseWSFEP61ScanPolicy
Develop a JAX-WS client from a WSDL file
Develop deployment descriptors for a JAX-WS client
Develop a dynamic client using JAX-WS APIs
Invoke JAX-WS web services asynchronously
Configure a web services client to access resources using a web proxy
Assembling a web services-enabled client JAR file into an EAR file
Assembling a web services-enabled client WAR file into an EAR file
Deploy web services client applications
Implement extensions to JAX-WS web services clients
JAX-WS client programming model
Web services
JAX-WS
Implement dynamic JAX-WS web services clients
Change SOAP message encoding to support WSI-Basic Profile
Test web services-enabled clients
Configure web services client bindings
Set up a development environment for web services
Example: Installing a web services sample with the console
Implement web services applications with JAX-WS
Implement web services applications from existing WSDL files with JAX-WS
Task overview: Implementing web services applications
Web services client to web container optimized communication
JAX-WS annotations
Artifacts used to develop web services
Map between Java language, WSDL and XML for JAX-WS applications
Web services specifications and APIs
http://www.ibm.com/developerworks/websphere/techjournal/0604_singh/0604
http://www.ibm.com/developerworks/websphere/techjournal/0606_singh/0606
http://www.ibm.com/developerworks/websphere/techjournal/0607_desprets/06