...
This xml file should respect the given syntax, though this is a spring based xml configuration file from where all beans of class
See a full example here. Note that you have to define the cxf-se namespace with
...
Code Block |
---|
|
<classpath>
<location>lib/foo.jar</location>
</classpath>
|
Endpoint
A few examples:
Code Block |
---|
|
<cxfse:endpoint>
<cxfse:pojo>
<bean class="org.apache.cxf.calculator.CalculatorImpl">
</bean>
</cxfse:pojo>
</cxfse:endpoint>
|
Code Block |
---|
|
<cxfse:endpoint>
<cxfse:pojo>
<bean class="org.apache.servicemix.cxfse.GreeterImplForClientProxy" autowire="false">
<property name="calculator">
<cxfse:proxy service="calculator:CalculatorService" context="#context" type="org.apache.cxf.calculator.CalculatorPortType" />
</property>
</bean>
</cxfse:pojo>
</cxfse:endpoint>
|
Info |
---|
title | Endpoint attributes |
---|
borderStyle | solidbgColor='lighblue' |
---|
|
Name | Type | Description | Required |
---|
annotations | String | The annotations used to configure the service. Can be "none", "java5", "jsr181", "commons". If not specified, the annotations type will be discovered by looking at the class. | no | endpoint | String | JBI Endpoint name | no (will be auto-generated if not specified) | interfaceName | QName | Interface QName implemented by the JBI endpoint | no (will be auto-generated if not specified) | mtomEnabled | boolean | Enable MTOM / attachment support | no (defaults to false) | pojo | Object | the instanciated POJO to service requests | one of pojo or pojoClass | pojoClass | String | the class name of the POJO to service requests | one of pojo or pojoClass | service | QName | JBI Service name | no (will be auto-generated if not specified) | serviceInterface | String | the class name of the interface to expose as a service | no | typeMapping | String | Can be "default", "xmlbeans", "jaxb2". Defaults to "default" (Aegis) if no annotations used, else defaults to "jaxb2" | no | wsdlResource | Spring resource | if set, the wsdl will be retrieved from the given Spring resource | no | style | String | The SOAP style to use (document, wrapped, rpc) | no (defaults to "wrapped") |
|
Accessing the JBI bus
The prefered way to access the JBI bus is by retrieving a ComponentContext implementation.
The spring BeanFactory has a parent factory which contains a bean named "context" that you can refer to.
Code Block |
---|
|
<jsr181:endpoint ...>
<jsr181:pojo>
<bean class="xxx">
<property name="context" ref="context" />
</bean>
</jsr181:pojo>
</jsr181:endpoint>
|
If you want to send a request to another service from your POJO, you can add the following method on your POJO:
Code Block |
---|
|
private javax.jbi.component.ComponentContext context;
public void setContext(javax.jbi.component.ComponentContext context) {
this.context = context;
}
|
You will be able to use the provided DeliveryChannel to send requests.
Note that only sendSync is allowed for active JBI exchanges (but you have to use send for DONE or ERROR status exchanges).
You can also use the client api:
Code Block |
---|
|
public void myMethod() {
ServiceMixClient client = new ServiceMixClientFacade(this.context);
QName service = new QName("http://servicemix.org/cheese/", "receiver");
EndpointResolver resolver = client.createResolverForService(service);
client.send(resolver, null, null, "<hello>world</hello>");
}
|
Lightweight mode
The servicemix-jsr181 component can also be configured in a spring/xbean configuration file, for use in an embedded ServiceMix.
Here is an example of such a configuration:
Wiki Markup |
---|
{snippet:id=lightweight|lang=xml|url=servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/test/resources/org/apache/servicemix/jsr181/spring.xml} |
Warning |
---|
title | Classpath issues when embedding servicemix-jsr181 component |
---|
|
When using the servicemix.xml configuration file to create jsr181 endpoints, you must include the servicemix-jsr181-xxx.jar in your classpath. You will find this file inside the component installer (./components/servicemix-jsr181-xxx.zip). Failing this, an IllegalArgumentException will be thrown with the following message: Component name: xxxxxx is bound to an object which is not a JBI component, it is of type: javax.xml.namespace.QName or aanother exception with |
Proxies
You can create java proxies for JBI endpoints, provided that they expose a WSDL.
The basic configuration is the following:
Wiki Markup |
---|
{snippet:id=proxy|lang=xml|url=servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/test/resources/org/apache/servicemix/jsr181/spring.xml} |
You can use it from one of you client bean, or from inside another component, and call the JBI endpoint as a plain Java object.
From a jsr181 Service Unit, it could be used as following:
Wiki Markup |
---|
{snippet:id=proxy|lang=xml|url=servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/test/resources/proxy/xbean.xml} |
Code Block |
---|
|
private Echo echo;
public void setEcho(Echo echo) {
this.echo = echo;
}
public void myMethod() {
String result = echo.echo("world");
...
}
|
MTOM support
MTOM is a way to handle large amounts of binary data in your services. Unlike attachments, the XML infoset stays the same. MTOM just "optimizes" any base64Binary data you have in your messages. When MTOM is turned on, this base64 data gets sent as a binary attachment saving time and space.
MTOM support can be turned on using:
Code Block |
---|
|
<jsr181:endpoint mtomEnabled="true" ... />
|
MTOM is supported for the following classes:
If you have a bean with the following method:
Code Block |
---|
|
public String echo(String msg, DataHandler binary) {
...
}
|
you will be able to call it using the following requests:
Code Block |
---|
|
<echo xmlns:xop='http://www.w3.org/2004/08/xop/include'>
<msg>hello world</msg>
<binary>
<xop:Include href='binary'/>
</binary>
</echo>
|
provided that the JBI message contains an attachment named "binary".