
h3. Annotated class
\\
The following class is a sample of JSR181 annotated class (taken from the Petals usecase sources) :
{code}package org.ow2.petals.usecase.jsr181;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
*
* @author chamerling - eBM WebSourcing
*
*
* NOTE : The
* @WebService parameters are not used by the component, the service name is
* defined in the service unit. Need to modify the CDK to be able to
* create the endpoint from these values...
*/
@WebService(serviceName = "Hello", name = "MyService", targetNamespace = "http://petals.ow2.org")
public class TestService {
/**
* Say hello to the world !
*/
@WebMethod
public String sayHello(String str) {
System.out.println("Hey! This is the sayHello operation.");
return "You say me " + str;
}
/**
* Get a person from its id only to test 'complex' data binding.
*
* @param id
* @return
*/
@WebMethod
public Person getPerson(int id) {
System.out.println("Get person " + id);
return new Person(id, "Christophe", "Hamerling", 29, "France");
}
/**
*
* @return
*/
@WebMethod
public String getTime() {
System.out.println("Get time");
return new SimpleDateFormat().format(new Date(System.currentTimeMillis()));
}
/**
* NOP
*/
@WebMethod
public void voidvoid() {
System.out.println("The Void operation");
}
/**
* The final operation will be 'specializedOperation'
*/
@WebMethod(operationName = "specializedOperation")
public void operation() {
System.out.println("The specialized operation");
}
/**
*
* @throws Exception
*/
@WebMethod
public String iAmThrowingAnException() throws Exception {
System.out.println("throw exception");
throw new Exception("This is a server side Exception");
}
}{code}
The main annotations you may use are :
* The *@WebService* annotation is mandatory and is used by the Axis2 engine to build the service. You can specialize the service name, target namespace and more with the annotation parameter.
* The *@WebMethod* annotation is used to delare the that the method will be see as a JBI operation. You can specialize the operation name and more with the annotation parameters.
More information is available on the Apache Axis2 page : [http://ws.apache.org/axis2/|http://ws.apache.org/axis2/] .
Before sending the JBI message to the Axis2 service, the JBI Service Engine will check if :
* If the requested operation exists. If not, an error will be returned in the JBI message exchange.
* The JBI Message Exchange Pattern (MEP) is compatible with the target operation. For example, in the previous code snippet, an InOut MEP is not compatible with the 'voidvoid' operation and an error will be returned in the JBI message exchange.
With the previous code samples, you can now call the _\{__[http://petals.ow2.org/helloworld]__}HelloworldService_ and operation _sayHello_ with an InOut MEP with a JBI message payload like :
{code:lang=xml}<sayHello>
<param0>Hey!!!</param0>
</sayHello>
{code}
and you will get a response like :
{code:lang=xml}<dlwmin:sayHelloResponse
xmlns:dlwmin="http://petals.ow2.org"
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<return>You say me Hey!!!</return>
</dlwmin:sayHelloResponse>
{code}
h1. Samples
The jsr181 service engine samples are available as use cases section. You can find them in the project sources repository.
We recommend you to check this source code to create the JSR181 class and the Service Unit.
h1. Limitations
# The WSDL description is not dynamically generated from the Java class at runtime. This is due to an Axis2 and Petals ESB class loader issue. You can find an example on how to generate and include the WSDL description from the Java class with some