Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Javascript, also known by its formal name ECMAScript, is one of the many dynamic languages that are growing in prevalence in development environments. It provides a quick and lightweight means of creating functionality that can be run on a number of platforms. Another strength of JavaScript is that applications can be quickly rewritten.

Celtix CXF provides support for developing services using JavaScript and ECMAScript for XML(E4X). The pattern used to develop these services are similar to JAX-WS Provider implementations that handle their requests and responses (either SOAP messages or SOAP payloads) as DOM documents.

Implementing a Service in

...

Javascript

Writing a service in JavaScript Javascript is a two step process:

  1. Definethe JAX-WS style metadata.
  2. Implementthe services business logic.

...

Normal Java providers typically use Java annotations to specify JAX-WS metadata. Since JavaScript Javascript does not support annotations, you use ordinary JavaScript Javascript variables to specify metadata for JavaScript Javascript implementations. Celtix CXF treats any JavaScript Javascript variable in your code whose name equals or begins with WebServiceProvider as a JAX-WS metadata variable.

Properties of the variable are expected to specify the same metadata that the JAX-WS WebServiceProvider annotation specifies, including:

  • wsdlLocation specifies a URL for the WSDL defining the service.
  • serviceName specifies the name of the service.
  • portName specifies the service's port/interface name.
  • targetNamespace specifies the target namespace of the service.

The JavaScript Javascript WebServiceProvider can also specify the following optional properties:

  • ServiceMode indicates whether the specified service handles SOAP payload documents or full SOAP message documents. This property mimics the JAX-WS ServiceMode annotation. The default value is PAYLOAD.
  • BindingMode indicates the service binding ID URL. The default is the SOAP 1.1/HTTP binding.
  • EndpointAddress indicates the URL consumer applications use to communicate with this service. The property is optional but has no default.

...

You implement the service's logic using the required invoke property of the WebServiceProvider variable. This variable is a function that accepts one input argument, a javax.xml.transform.dom.DOMSource node, and returns a document of the same type. The invoke function can manipulate either the input or output documents using the regular Java DOMSource class interface just as a Java application would.

Example 2 shows an invokeproperty for a simple JavaScript Javascript service implementation.

Implementing a Service in ECMAScript for XML(E4X)

Writing a Celtix CXF service using E4X is very similar to writing a service using JavaScriptJavascript. You define the JAX-WS metadata using the same WebServiceProvider variable in JavaScriptJavascript. You also implement the service's logic in the WebServiceProvider variable's invoke property.

The only difference between the two approaches is the type of document the implementation manipulates. When working with E4X, the implementation receives requests as an E4X XML document and returns a document of the same type. These documents are manipulated using built-in E4X XML features.

...

Deploying Scripted Services

Celtix CXF provides a lightweight container that allows you to deploy your Javascript and E4X services and take advantage of CeltixCXF's pluggable transport infrastructure.Note:

Note

Script based services can work with SOAP messages. So, while they are multi-transport, they can only use the SOAP binding.

You deploy them into the container using the following command:java org.objectweb.celtix.js.rhino.ServerApp -aaddressURL -bbaseAddressURLfile.js file2.jsfile3.jsx ...
The org.objectweb.celtix.js.rhino.ServerAppclass, shorted to ServerAppbelow, takes one or more Javascript files, suffixed with a .js, or E4X files, suffixed with a .jsx, and loads them into the Celtix runtime. If ServerApplocates JAX-WS metadata in the files it creates and registers a JAX-WS Provider<DOMSource>object for each service. The Provider<DOMSource>object delegates the processing of requests to the implementation stored in the associated file. ServerAppcan also take the name of a directory containing Javascript and E4X files. It will load all of the scripts that contain JAX-WS metadata, load them, and publish a service endpoint for each one.

...