Maven archtype based on OpenESB existing structure,New project now can be build with OpenESB/Netbeans-SOA builds

master
logicoyparam 2013-08-08 16:27:34 +05:30
parent afe19d7058
commit 555243f539
457 changed files with 33495 additions and 0 deletions

View File

@ -0,0 +1,114 @@
Command to buid OpenESB component from maven archetype :
Description :
This document shows how to develop openESB components, which will be build with OpenESB build only.
The project generated using these archtype will be similar to existing component built with OpenESB.
Folder structure for these new project will be based on openESB.
- Plugin project can be build with netbeans-soa project.
- Component project can be build with ojc-core in openesb-component
Install Archtype in Local repository :
======================================
NOTE: Maven version should be 2.0.9 as per OpenESB
1) Checkout following Projects from repository :
maven-archetype-service-engine-v2
maven-archetype-binding-component-v2
maven-archetype-service-engine-plugin-v2
maven-archetype-binding-component-plugin-v2
For archetype of Service Engine
---------------------------------
1) Change directory to maven-archetype-service-engine-v2/
$ mvn clean install
For archetype of Binding Component
---------------------------------
1) Change directory to maven-archetype-binding-component-v2/
$ mvn clean install
For archetype of Service Engine Netbeans Plugin Project
---------------------------------
1) Change directory to maven-archetype-service-engine-plugin-v2/
$ mvn clean install
For archetype of Binding Component Netbeans Plugin Project
---------------------------------
1) Change directory to maven-archetype-binding-component-plugin-v2/
$ mvn clean install
==================Installation complete for all archetype in User's Local repository==============
=================================================
Building Projects from archetypes
=================================================
1) For Creating new service engine:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=service-engine-ojc-archetype \
-DarchetypeVersion=2.3.0 -DgroupId=newse -DartifactId=newse
--OutPut for above command requires user input
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
......
[GIVE THE Command line params options as per your wish and openESB configuration.
[INFO] Using property: groupId = newse
[INFO] Using property: artifactId = newse
Define value for property 'version': 1.0-SNAPSHOT:
[INFO] Using property: package = newse
[INFO] Using property: componentName = newse
Confirm properties configuration:
groupId: newse
artifactId: newse
version: 1.0-SNAPSHOT
package: newse
componentName: newse
Y:
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: service-engine-ojc-archetype:2.3.0
[INFO] ----------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 49 seconds
[INFO] Finished at: Wed Jul 31 12:34:16 IST 2013
[INFO] Final Memory: 20M/50M
[INFO] ------------------------------------------------------------------------
=========================== Project build is done ==================================
Open New project in OpenESB 2.3, and to build run smvn.bat clean install.
2) For Creating new binding component:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=binding-component-ojc-archetype \
-DarchetypeVersion=2.3.0 -DgroupId=newbc -DartifactId=newbc
--OutPut for above command requires user input
--Follow same steps and give input as it will ask.
Open New project in OpenESB 2.3, and to build run smvn.bat clean install.
3) For Creating new service engine plugin:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=ServiceEngine-Plugin-archetype \
-DarchetypeVersion=1.0-SNAPSHOT -DgroupId=newsemodule -DartifactId=newsemodule -Dgoals=antrun:run
--OutPut for above command requires user input
--Follow same steps and give input as it will ask.
Open New project in OpenESB 2.3.
3) For Creating new service engine plugin:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=BindingComponent-Plugin-archetype \
-DarchetypeVersion=2.3.0 -DgroupId=newbcmodule -DartifactId=newbcmodule -Dgoals=antrun:run
--OutPut for above command requires user input
--Follow same steps and give input as it will ask.
Open New project in OpenESB 2.3.

View File

@ -0,0 +1,114 @@
Command to buid OpenESB component from maven archetype :
Description :
This document shows how to develop openESB components, which will be build with OpenESB build only.
The project generated using these archtype will be similar to existing component built with OpenESB.
Folder structure for these new project will be based on openESB.
- Plugin project can be build with netbeans-soa project.
- Component project can be build with ojc-core in openesb-component
Install Archtype in Local repository :
======================================
NOTE: Maven version should be 2.0.9 as per OpenESB
1) Checkout following Projects from repository :
maven-archetype-service-engine-v2
maven-archetype-binding-component-v2
maven-archetype-service-engine-plugin-v2
maven-archetype-binding-component-plugin-v2
For archetype of Service Engine
---------------------------------
1) Change directory to maven-archetype-service-engine-v2/
$ mvn clean install
For archetype of Binding Component
---------------------------------
1) Change directory to maven-archetype-binding-component-v2/
$ mvn clean install
For archetype of Service Engine Netbeans Plugin Project
---------------------------------
1) Change directory to maven-archetype-service-engine-plugin-v2/
$ mvn clean install
For archetype of Binding Component Netbeans Plugin Project
---------------------------------
1) Change directory to maven-archetype-binding-component-plugin-v2/
$ mvn clean install
==================Installation complete for all archetype in User's Local repository==============
=================================================
Building Projects from archetypes
=================================================
1) For Creating new service engine:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=service-engine-ojc-archetype \
-DarchetypeVersion=2.3.0 -DgroupId=newse -DartifactId=newse
--OutPut for above command requires user input
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
......
[GIVE THE Command line params options as per your wish and openESB configuration.
[INFO] Using property: groupId = newse
[INFO] Using property: artifactId = newse
Define value for property 'version': 1.0-SNAPSHOT:
[INFO] Using property: package = newse
[INFO] Using property: componentName = newse
Confirm properties configuration:
groupId: newse
artifactId: newse
version: 1.0-SNAPSHOT
package: newse
componentName: newse
Y:
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: service-engine-ojc-archetype:2.3.0
[INFO] ----------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 minutes 49 seconds
[INFO] Finished at: Wed Jul 31 12:34:16 IST 2013
[INFO] Final Memory: 20M/50M
[INFO] ------------------------------------------------------------------------
=========================== Project build is done ==================================
Open New project in OpenESB 2.3, and to build run smvn.bat clean install.
2) For Creating new binding component:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=binding-component-ojc-archetype \
-DarchetypeVersion=2.3.0 -DgroupId=newbc -DartifactId=newbc
--OutPut for above command requires user input
--Follow same steps and give input as it will ask.
Open New project in OpenESB 2.3, and to build run smvn.bat clean install.
3) For Creating new service engine plugin:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=ServiceEngine-Plugin-archetype \
-DarchetypeVersion=1.0-SNAPSHOT -DgroupId=newsemodule -DartifactId=newsemodule -Dgoals=antrun:run
--OutPut for above command requires user input
--Follow same steps and give input as it will ask.
Open New project in OpenESB 2.3.
3) For Creating new service engine plugin:
mvn archetype:generate -DarchetypeGroupId=open-jbi-components -DarchetypeArtifactId=BindingComponent-Plugin-archetype \
-DarchetypeVersion=2.3.0 -DgroupId=newbcmodule -DartifactId=newbcmodule -Dgoals=antrun:run
--OutPut for above command requires user input
--Follow same steps and give input as it will ask.
Open New project in OpenESB 2.3.

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>open-jbi-components</groupId>
<artifactId>BindingComponent-Plugin-archetype</artifactId>
<version>2.3.0</version>
<packaging>jar</packaging>
<name>BindingComponent-Plugin-archetype</name>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.2</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<description>Maven project for JBI Component that contains the
maven and netbeans build setup and component code to build and test the JBI Component.</description>
<url>http://open-esb.org</url>
</project>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : archetype descripter
Created on : 23 July, 2013, 12:34 PM
Author : Paramjeet Singh, Logicoy
Description:
Maven project archetype descripter for OpenESB Service Engine Plugin archetype, this contains All
necessory logic for building the archetype packages and classes.
-->
<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="BindingComponent"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory>nbproject</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src</directory>
<includes>
<include>**/*.java</include>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src</directory>
<includes>
<include>**/*.ExtensibilityElementTemplateProvider</include>
<include>**/*.ElementFactory</include>
<include>**/*.png</include>
<include>**/*.ValidatorSchemaFactory</include>
<include>**/*.Validator</include>
<include>**/*.xsd</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>build.xml</include>
<include>pom.xml</include>
<include>**/*.mf</include>
</includes>
</fileSet>
</fileSets>
</archetype-descriptor>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- You may freely edit this file. See harness/README in the NetBeans platform -->
<!-- for some information on what you could do (e.g. targets to override). -->
<!-- If you delete this file and reopen the project it will be recreated. -->
<project name="bcdeployplugin" default="netbeans" basedir=".">
<description>Builds, tests, and runs the project bcdeployplugin.</description>
<import file="nbproject/build-impl.xml"/>
</project>

View File

@ -0,0 +1,6 @@
Manifest-Version: 1.0
OpenIDE-Module: bcdeployplugin
OpenIDE-Module-Layer: bcdeployplugin/layer.xml
OpenIDE-Module-Localizing-Bundle: bcdeployplugin/Bundle.properties
OpenIDE-Module-Specification-Version: 1.0

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
*** GENERATED FROM project.xml - DO NOT EDIT ***
*** EDIT ../build.xml INSTEAD ***
-->
<project name="bcdeployplugin-impl" basedir="..">
<fail message="Please build using Ant 1.7.1 or higher.">
<condition>
<not>
<antversion atleast="1.7.1"/>
</not>
</condition>
</fail>
<property file="nbproject/private/suite-private.properties"/>
<property file="nbproject/suite.properties"/>
<fail unless="suite.dir">You must set 'suite.dir' to point to your containing module suite</fail>
<property file="${suite.dir}/nbproject/private/platform-private.properties"/>
<property file="${suite.dir}/nbproject/platform.properties"/>
<macrodef name="property" uri="http://www.netbeans.org/ns/nb-module-project/2">
<attribute name="name"/>
<attribute name="value"/>
<sequential>
<property name="@{name}" value="${@{value}}"/>
</sequential>
</macrodef>
<property file="${user.properties.file}"/>
<nbmproject2:property name="harness.dir" value="nbplatform.${nbplatform.active}.harness.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
<nbmproject2:property name="netbeans.dest.dir" value="nbplatform.${nbplatform.active}.netbeans.dest.dir" xmlns:nbmproject2="http://www.netbeans.org/ns/nb-module-project/2"/>
<fail message="You must define 'nbplatform.${nbplatform.active}.harness.dir'">
<condition>
<not>
<available file="${harness.dir}" type="dir"/>
</not>
</condition>
</fail>
<import file="${harness.dir}/build.xml"/>
</project>

View File

@ -0,0 +1,8 @@
build.xml.data.CRC32=1dc6d1f3
build.xml.script.CRC32=30e09a00
build.xml.stylesheet.CRC32=a56c6a5b@2.50.1
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
nbproject/build-impl.xml.data.CRC32=4558c72b
nbproject/build-impl.xml.script.CRC32=d06ccb3f
nbproject/build-impl.xml.stylesheet.CRC32=68e521fc@2.50.1

View File

@ -0,0 +1,27 @@
branding.token=soa
cluster.path=\
${nbplatform.active.dir}/apisupport:\
${nbplatform.active.dir}/cnd:\
${nbplatform.active.dir}/dlight:\
${nbplatform.active.dir}/enterprise:\
${nbplatform.active.dir}/ergonomics:\
${nbplatform.active.dir}/groovy:\
${nbplatform.active.dir}/harness:\
${nbplatform.active.dir}/ide:\
${nbplatform.active.dir}/java:\
${nbplatform.active.dir}/javacard:\
${nbplatform.active.dir}/javafx:\
${nbplatform.active.dir}/mobility:\
${nbplatform.active.dir}/nb:\
${nbplatform.active.dir}/php:\
${nbplatform.active.dir}/platform:\
${nbplatform.active.dir}/profiler:\
${nbplatform.active.dir}/webcommon:\
${nbplatform.active.dir}/websvccommon
suite.dir=${basedir}
dest.dir=${suite.dir}/soabuild
nb.dest.dir=${dest.dir}/netbeans
nbplatform.active=default
nbplatform.nb721.netbeans.dest.dir=${dest.dir}/netbeans
nbplatform.nb721.harness.dir=${nbplatform.nb721.netbeans.dest.dir}/harness

View File

@ -0,0 +1 @@
user.properties.file=D:\\softwares\\openesb_logicoy_last_working57\\.netbeans\\openesb\\build.properties

View File

@ -0,0 +1,30 @@
javac.source=1.6
javac.compilerargs=-Xlint -Xlint:-serial
test.unit.cp.extra=\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-xdm.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-xam.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-retriever.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-schema-model.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-wsdl-model.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-editor.jar:\
${netbeans.dest.dir}/platform6/lib/org-openide-modules.jar:\
${netbeans.dest.dir}/platform6/lib/org-openide-util.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-options.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-text.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-nodes.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-loaders.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-dialogs.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-windows.jar:\
${netbeans.dest.dir}/platform6/modules/org-openide-awt.jar:\
${netbeans.dest.dir}/platform6/modules/org-netbeans-modules-masterfs.jar:\
${netbeans.dest.dir}/platform6/core/org-openide-filesystems.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-projectapi.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-editor-util.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-text.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-xml-core.jar:\
${netbeans.dest.dir}/ide7/modules/org-netbeans-modules-editor-lib.jar:\
${netbeans.dest.dir}/ide7/modules/org-apache-xml-resolver.jar:\
${netbeans.dest.dir}/soa1/modules/org-netbeans-modules-wsdlextensions-jms.jar
test.unit.run.cp=${test.unit.cp.extra}

View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://www.netbeans.org/ns/project/1">
<type>org.netbeans.modules.apisupport.project</type>
<configuration>
<data xmlns="http://www.netbeans.org/ns/nb-module-project/2">
<code-name-base>bcdeployplugin</code-name-base>
<standalone/>
<module-dependencies>
<dependency>
<code-name-base>org.netbeans.modules.soa.wsdl.bindingsupport</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>7.2.1</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.xml.schema.model</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.2</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.xml.wsdl.model</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.2</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.xml.xam</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.2</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.openide.util</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>7.9.0.1</specification-version>
</run-dependency>
</dependency>
</module-dependencies>
<public-packages/>
</data>
</configuration>
</project>

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<!--
This maven project is configured to invoke netbeans ant build script to build and test the netbeans jbi component
project created using the Netbeans IDE. It configures the maven antrun plugin to invoke the netbeans project
build scripts at various phases of the maven build lifecycle(compile, test-compile, test, package, integration-test).
-->
<modelVersion>4.0.0</modelVersion>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>jar</packaging>
<version>${version}</version>
<name>JBI Component[BindingComponent]</name>
<description>Maven project for JBI Component that contains the
maven and netbeans build setup and component code to build and test the JBI Component.</description>
<url>http://open-esb.org</url>
<build>
<directory>build</directory>
<sourceDirectory>src/java</sourceDirectory>
<testSourceDirectory>test/java</testSourceDirectory>
<outputDirectory>build/classes</outputDirectory>
<testOutputDirectory>build/test/classes</testOutputDirectory>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<!-- configure antrun plugin to invoke netbeans project build scripts for
various phases of the project -->
<artifactId>maven-antrun-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>default-cli</id>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>!!!!!!!!!!!!!!!!!!!!!! Moving Files and organizing package !!!!!!!!!!!!!!!!!!!!!!!!</echo>
<delete file="pom.xml" />
<echo>!!!!!!!!!!!!!!!!!!!!!! Moving Files and organizing package completed successfully!!!!!!!!!!!!!!!!!!!!!!!!</echo>
</tasks>
</configuration>
</execution>
</executions>
<dependencies>
<!--
These dependencies are required in the antrun plugin classpath so that the ant script
defining the optional or junit ant tasks will have these jars available in the ant
main classpath.
-->
<dependency>
<groupId>ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-junit</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-nodeps</artifactId>
<version>1.6.5</version>
</dependency>
<dependency>
<groupId>ant</groupId>
<artifactId>ant-junit</artifactId>
<version>1.6.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-ant-tasks</artifactId>
<version>2.0.7</version>
</dependency>
</project>

View File

@ -0,0 +1,6 @@
cname.model.ExtElementFactoryProvider$BindingExtFactory
cname.model.ExtElementFactoryProvider$OperationExtFactory
cname.model.ExtElementFactoryProvider$InputExtFactory
cname.model.ExtElementFactoryProvider$OutputExtFactory
cname.model.ExtElementFactoryProvider$FaultExtFactory
cname.model.ExtElementFactoryProvider$PortExtFactory

View File

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ext="http://schemas.samples.com/jbi/wsdl-extensions/BindingComponent/"
targetNamespace="http://schemas.samples.com/jbi/wsdl-extensions/BindingComponent/">
<xs:import namespace="http://schemas.xmlsoap.org/wsdl/" />
<!-- binding extension schema -->
<xs:element name="binding" type="ext:tBinding">
<xs:annotation>
<xs:documentation>
"binding" defines a protocol based binding details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tBinding">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement"/>
<!-- TODO: add any attributes required for this extension element here.
<xs:attribute name="my_attribute" type="xs:string" use="required" />
-->
</xs:complexContent>
</xs:complexType>
<!-- binding operation extension schema -->
<xs:element name="operation" type="ext:tOperation">
<xs:annotation>
<xs:documentation>
"operation" defines the protocol based binding operation details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tOperation">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<!-- TODO: add any attributes required for this extension element here.
<xs:attribute name="my_attribute" type="xs:string" use="required" />
-->
<xs:attribute name="action" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding operation input extension schema -->
<xs:element name="input" type="ext:tInput">
<xs:annotation>
<xs:documentation>
"input" defines the protocol based binding input details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tInput">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<!-- TODO: add any attributes required for this extension element here.
<xs:attribute name="my_attribute" type="xs:string" use="required" />
-->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding operaton output extension schema -->
<xs:element name="output" type="ext:tOutput">
<xs:annotation>
<xs:documentation>
"output" defines the protocol based binding output details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tOutput">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<!-- TODO: add any attributes required for this extension element here.
<xs:attribute name="my_attribute" type="xs:string" use="required" />
-->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding operation fault extension schema -->
<xs:element name="fault" type="ext:tFault">
<xs:annotation>
<xs:documentation>
"fault" defines the protocol based binding fault details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tFault">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<!-- TODO: add any attributes required for this extension element here.
<xs:attribute name="my_attribute" type="xs:string" use="required" />
-->
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding port extension schema -->
<xs:element name="address" type="ext:tAddress">
<xs:annotation>
<xs:documentation>
"address" indicates protocol based binding port details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tAddress">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<!-- TODO: add any attributes required for this extension element here.
<xs:attribute name="my_attribute" type="xs:string" use="required" />
-->
<xs:attribute name="location" type="xs:anyURI" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,21 @@
# binding component deployment plugin resource bundle
# binding deploy plugin
OpenIDE-Module-Name=BCDeployPlugin
# deployment plugin
OpenIDE-Module-Short-Description=Binding component deployment plugin for BindingComponent
# deployment plugin for adding wsdl extensions related to the binding component to the wsdl editor
OpenIDE-Module-Long-Description=Deployment plugin for adding wsdl extensions related to this binding component to the wsdl editor
# category
OpenIDE-Module-Display-Category=CAPS
# WSDLEditor mapping names for the Binding
WSDLEditor/Binding/BindingComponentBindingExt=BindingComponent Binding
WSDLEditor/BindingOperation/BindingComponentOperationExt=BindingComponent Binding Operation extension
WSDLEditor/BindingOperationInput/BindingComponentInputExt=BindingComponent Binding Input extension
WSDLEditor/BindingOperationOutput/BindingComponentOutputExt=BindingComponent Binding Output extension
WSDLEditor/BindingOperationFault/BindingComponentFaultExt=BindingComponent Binding Fault extension
WSDLEditor/ServicePort/BindingComponentPortExt=BindingComponent Service Port extension

View File

@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "http://www.netbeans.org/dtds/filesystem-1_1.dtd">
<filesystem>
<folder name="WSDLEditor">
<!-- WSDL Editor required information for text/visual editing and validating the
wsdl extension elements for this binding component -->
<!-- XSD file for the wsdl extension and its namespace and prefix values -->
<file name="BindingComponentWsdlExt.xsd" url="BindingComponentWsdlExt.xsd">
<attr name="namespace" stringvalue="http://schemas.samples.com/jbi/wsdl-extensions/BindingComponent/" />
<attr name="prefix" stringvalue="bindingcomponent" />
</file>
<!-- wsdl extension elements and their visual attributes description used
in each wsdl element of the wsdl defintion to add the extension element
TODO: add/remove any extension elements/attribute information that have
modified in the wsdl extension schema here to map them to WSDL Editor model -->
<folder name ="Binding">
<file name="BindingComponentBindingExt">
<attr name="xsdFileName" stringvalue="BindingComponentWsdlExt" />
<attr name="element" stringvalue="binding" />
<attr name="SystemFileSystem.localizingBundle" stringvalue="bcdeployplugin.Bundle" />
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/bcdeployplugin/resources/binding-ext.png" />
</file>
</folder>
<folder name ="BindingOperation">
<file name="BindingComponentOperationExt">
<attr name="xsdFileName" stringvalue="BindingComponentWsdlExt" />
<attr name="element" stringvalue="operation" />
<attr name="SystemFileSystem.localizingBundle" stringvalue="bcdeployplugin.Bundle" />
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/bcdeployplugin/resources/operation-ext.png" />
</file>
</folder>
<folder name ="BindingOperationInput">
<file name="BindingComponentInputExt">
<attr name="xsdFileName" stringvalue="BindingComponentWsdlExt" />
<attr name="element" stringvalue="input" />
<attr name="SystemFileSystem.localizingBundle" stringvalue="bcdeployplugin.Bundle" />
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/bcdeployplugin/resources/input-ext.png" />
</file>
</folder>
<folder name ="BindingOperationOutput">
<file name="BindingComponentOutputExt">
<attr name="xsdFileName" stringvalue="BindingComponentWsdlExt" />
<attr name="element" stringvalue="output" />
<attr name="SystemFileSystem.localizingBundle" stringvalue="bcdeployplugin.Bundle" />
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/bcdeployplugin/resources/output-ext.png" />
</file>
</folder>
<folder name ="BindingOperationFault">
<file name="BindingComponentFaultExt">
<attr name="xsdFileName" stringvalue="BindingComponentWsdlExt" />
<attr name="element" stringvalue="fault" />
<attr name="SystemFileSystem.localizingBundle" stringvalue="bcdeployplugin.Bundle" />
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/bcdeployplugin/resources/fault-ext.png" />
</file>
</folder>
<folder name ="ServicePort">
<file name="BindingComponentPortExt" >
<attr name="xsdFileName" stringvalue="BindingComponentWsdlExt" />
<attr name="element" stringvalue="address" />
<attr name="SystemFileSystem.localizingBundle" stringvalue="bcdeployplugin.Bundle" />
<attr name="SystemFileSystem.icon" urlvalue="nbresloc:/bcdeployplugin/resources/port-ext.png" />
</file>
</folder>
</folder>
<folder name="JbiComponents">
<!-- JBI Component description for binding component required to participate
in the jbi composite application project that generates the service unit
for this binding component -->
<folder name="BindingComponent">
<attr name="id" stringvalue="BindingComponent"/>
<attr name="type" stringvalue="Binding"/>
<attr name="description" stringvalue="Description of binding component : BindingComponent"/>
<file name="BindingComponent.binding-1.0" >
<attr name="namespace" stringvalue="http://schemas.samples.com/jbi/wsdl-extensions/BindingComponent/"/>
</file>
</folder>
</folder>
</filesystem>

View File

@ -0,0 +1,47 @@
/*
* BindingExt.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.Binding;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* extension element.
*
* @author chikkala
*/
public interface BindingExt extends ExtComponent {
//TODO: define get/set methods for properties for BindingExt if the extension element has attributes.
/**
* This class is an implementation of BindingExt interface that provides
* java model for binding extensibility element.
*/
public static class BindingExtImpl extends ExtModelImpl implements BindingExt {
public BindingExtImpl(WSDLModel model, Element e) {
super(model, e);
}
public BindingExtImpl(WSDLModel model) {
this(model, createPrefixedElement(QN_BINDING_EXT, model));
}
public void accept(ExtVisitor visitor) {
visitor.visit(this);
}
@Override
public boolean canBeAddedTo(Component target) {
if (target instanceof Binding) {
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,53 @@
/*
* ExtAttribute.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.xam.dom.Attribute;
/**
* @author chikkala
*/
public enum ExtAttribute implements Attribute, ExtConstants {
//TODO: define any additional extension elements attributes here
ACTION(ATTR_ACTION),
SERVICE_URL(ATTR_SERVICE_URL),
USERNAME(ATTR_USERNAME),
PASSWORD(ATTR_PASSWORD),
MBEAN(ATTR_MBEAN);
private String name;
private Class type;
private Class subtype;
ExtAttribute(String name) {
this(name, String.class);
}
ExtAttribute(String name, Class type) {
this(name, type, null);
}
ExtAttribute(String name, Class type, Class subtype) {
this.name = name;
this.type = type;
this.subtype = subtype;
}
@Override
public String toString() {
return name;
}
public Class getType() {
return type;
}
public String getName() {
return name;
}
public Class getMemberType() {
return subtype;
}
}

View File

@ -0,0 +1,35 @@
/*
* ExtComponent.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.ExtensibilityElement;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.wsdl.model.spi.GenericExtensibilityElement;
import org.w3c.dom.Element;
/**
* This is the base class for the extension model
*
* @author chikkala
*/
public interface ExtComponent extends ExtConstants, ExtensibilityElement {
void accept(ExtVisitor visitor);
/**
* this class is the base class for the extension model objects
*/
public static abstract class ExtModelImpl
extends GenericExtensibilityElement implements ExtComponent {
public ExtModelImpl(WSDLModel model, Element e) {
super(model, e);
}
@Override
protected String getNamespaceURI() {
return NS_URI;
}
}
}

View File

@ -0,0 +1,47 @@
/*
* ExtConstants.java
*
*/
package net.openesb.component.${artifactId}.model;
import javax.xml.namespace.QName;
/**
* This interface defines the constants for the namespace, elements, attributes
* and qnames corresponding to the wsdl extensions that this component
* processes. These constants will be used in the wsdl extension model used to
* process a particular wsdl extensions.
*
* @author chikkala
*/
public interface ExtConstants {
public static final String NS_URI_WSDL = "http://schemas.xmlsoap.org/wsdl/";
public static final String NS_URI_XMLNS = "http://www.w3.org/2000/xmlns/";
/**
* wsdl extension namespace processed by this wsdl extension model
*/
public static final String NS_URI = "http://java.sun.com/jbi/wsdl-extensions/sample/jmx-bc/";
public static final String NS_DEF_PREFIX = "jmxbc";
// wsdl extension element names.
public static final String EL_BINDING_EXT = "binding";
public static final String EL_OPERATION_EXT = "operation";
public static final String EL_INPUT_EXT = "input";
public static final String EL_OUTPUT_EXT = "output";
public static final String EL_FAULT_EXT = "fault";
public static final String EL_PORT_EXT = "address";
// Qualified wsdl extension element names.
public static final QName QN_BINDING_EXT = new QName(NS_URI, EL_BINDING_EXT);
public static final QName QN_OPERATION_EXT = new QName(NS_URI, EL_OPERATION_EXT);
public static final QName QN_INPUT_EXT = new QName(NS_URI, EL_INPUT_EXT);
public static final QName QN_OUTPUT_EXT = new QName(NS_URI, EL_OUTPUT_EXT);
public static final QName QN_FAULT_EXT = new QName(NS_URI, EL_FAULT_EXT);
public static final QName QN_PORT_EXT = new QName(NS_URI, EL_PORT_EXT);
//TODO: define any additional extension element attribute names here.
// wsdl extension elements attribute names.
public static final String ATTR_ACTION = "action";
public static final String ATTR_SERVICE_URL = "serviceURL";
public static final String ATTR_USERNAME = "username";
public static final String ATTR_PASSWORD = "password";
public static final String ATTR_MBEAN = "mbean";
}

View File

@ -0,0 +1,85 @@
/*
* ExtElementFactoryProvider
*/
package net.openesb.component.${artifactId}.model;
import java.util.Collections;
import java.util.Set;
import javax.xml.namespace.QName;
import org.netbeans.modules.xml.wsdl.model.WSDLComponent;
import org.netbeans.modules.xml.wsdl.model.spi.ElementFactory;
import org.w3c.dom.Element;
/**
* Factory class that has wsdl extension elements model factories
*
* @author chikkala
*/
public class ExtElementFactoryProvider {
public static class BindingExtFactory extends ElementFactory {
public Set<QName> getElementQNames() {
return Collections.singleton(ExtConstants.QN_BINDING_EXT);
}
public WSDLComponent create(WSDLComponent context, Element element) {
return new BindingExt.BindingExtImpl(context.getModel(), element);
}
}
public static class OperationExtFactory extends ElementFactory {
public Set<QName> getElementQNames() {
return Collections.singleton(ExtConstants.QN_OPERATION_EXT);
}
public WSDLComponent create(WSDLComponent context, Element element) {
return new OperationExt.OperationExtImpl(context.getModel(), element);
}
}
public static class InputExtFactory extends ElementFactory {
public Set<QName> getElementQNames() {
return Collections.singleton(ExtConstants.QN_INPUT_EXT);
}
public WSDLComponent create(WSDLComponent context, Element element) {
return new InputExt.InputExtImpl(context.getModel(), element);
}
}
public static class OutputExtFactory extends ElementFactory {
public Set<QName> getElementQNames() {
return Collections.singleton(ExtConstants.QN_OUTPUT_EXT);
}
public WSDLComponent create(WSDLComponent context, Element element) {
return new OutputExt.OutputExtImpl(context.getModel(), element);
}
}
public static class FaultExtFactory extends ElementFactory {
public Set<QName> getElementQNames() {
return Collections.singleton(ExtConstants.QN_FAULT_EXT);
}
public WSDLComponent create(WSDLComponent context, Element element) {
return new FaultExt.FaultExtImpl(context.getModel(), element);
}
}
public static class PortExtFactory extends ElementFactory {
public Set<QName> getElementQNames() {
return Collections.singleton(ExtConstants.QN_PORT_EXT);
}
public WSDLComponent create(WSDLComponent context, Element element) {
return new PortExt.PortExtImpl(context.getModel(), element);
}
}
}

View File

@ -0,0 +1,25 @@
/*
* ExtVisitor.java
*/
package net.openesb.component.${artifactId}.model;
/**
* This interface provides the visitor pattern to validate the extension model
* objects.
*
* @author chikkala
*/
public interface ExtVisitor {
void visit(BindingExt bindingExt);
void visit(OperationExt operationExt);
void visit(InputExt inputExt);
void visit(OutputExt outputExt);
void visit(FaultExt faultExt);
void visit(PortExt portExt);
}

View File

@ -0,0 +1,47 @@
/*
* FaultExt.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.BindingFault;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation fault extension element.
*
* @author chikkala
*/
public interface FaultExt extends ExtComponent {
//TODO: define get/set methods for properties for FaultExt if the extension element has attributes.
/**
* This class is an implementation of FaultExt interface that provides java
* model for binding operation fault extensibility element.
*/
public static class FaultExtImpl extends ExtModelImpl implements FaultExt {
public FaultExtImpl(WSDLModel model, Element e) {
super(model, e);
}
public FaultExtImpl(WSDLModel model) {
this(model, createPrefixedElement(QN_FAULT_EXT, model));
}
public void accept(ExtVisitor visitor) {
visitor.visit(this);
}
@Override
public boolean canBeAddedTo(Component target) {
if (target instanceof BindingFault) {
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,47 @@
/*
* InputExt.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.BindingInput;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation input extension element.
*
* @author chikkala
*/
public interface InputExt extends ExtComponent {
//TODO: define get/set methods for properties for InputExt if the extension element has attributes.
/**
* This class is an implementation of InputExt interface that provides java
* model for binding operation input extensibility element.
*/
public static class InputExtImpl extends ExtModelImpl implements InputExt {
public InputExtImpl(WSDLModel model, Element e) {
super(model, e);
}
public InputExtImpl(WSDLModel model) {
this(model, createPrefixedElement(QN_INPUT_EXT, model));
}
public void accept(ExtVisitor visitor) {
visitor.visit(this);
}
@Override
public boolean canBeAddedTo(Component target) {
if (target instanceof BindingInput) {
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,68 @@
/*
* OperationExt.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.BindingOperation;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation extension element.
*
* @author chikkala
*/
public interface OperationExt extends ExtComponent {
/**
* Getter for property action.
*
* @return Value of property action.
*/
public String getAction();
/**
* Setter for property action.
*
* @param action New value of property action.
*/
public void setAction(String action);
/**
* This class is an implementation of OperationExt interface that provides
* java model for binding operation extensibility element.
*/
public static class OperationExtImpl extends ExtModelImpl implements OperationExt {
public OperationExtImpl(WSDLModel model, Element e) {
super(model, e);
}
public OperationExtImpl(WSDLModel model) {
this(model, createPrefixedElement(QN_OPERATION_EXT, model));
}
public void accept(ExtVisitor visitor) {
visitor.visit(this);
}
@Override
public boolean canBeAddedTo(Component target) {
if (target instanceof BindingOperation) {
return true;
}
return false;
}
public String getAction() {
return getAttribute(ExtAttribute.ACTION);
}
public void setAction(String action) {
setAttribute(ATTR_ACTION, ExtAttribute.ACTION, action);
}
}
}

View File

@ -0,0 +1,47 @@
/*
* OutputExt.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.BindingOutput;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation output extension element.
*
* @author chikkala
*/
public interface OutputExt extends ExtComponent {
//TODO: define get/set methods for properties for OutputExt if the extension element has attributes.
/**
* This class is an implementation of OutputExt interface that provides java
* model for binding operation output extension element.
*/
public static class OutputExtImpl extends ExtModelImpl implements OutputExt {
public OutputExtImpl(WSDLModel model, Element e) {
super(model, e);
}
public OutputExtImpl(WSDLModel model) {
this(model, createPrefixedElement(QN_OUTPUT_EXT, model));
}
public void accept(ExtVisitor visitor) {
visitor.visit(this);
}
@Override
public boolean canBeAddedTo(Component target) {
if (target instanceof BindingOutput) {
return true;
}
return false;
}
}
}

View File

@ -0,0 +1,134 @@
/*
* PortExt.java
*/
package net.openesb.component.${artifactId}.model;
import org.netbeans.modules.xml.wsdl.model.Port;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Component;
import org.w3c.dom.Element;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for service
* port extension element.
*
* @author chikkala
*/
public interface PortExt extends ExtComponent {
/**
* Getter for property serviceURL.
*
* @return Value of property serviceURL.
*/
public String getServiceURL();
/**
* Setter for property serviceURL.
*
* @param serviceURL New value of property serviceURL.
*/
public void setServiceURL(String serviceURL);
/**
* Getter for property username.
*
* @return Value of property username.
*/
public String getUsername();
/**
* Setter for property username.
*
* @param username New value of property username.
*/
public void setUsername(String username);
/**
* Getter for property password.
*
* @return Value of property password.
*/
public String getPassword();
/**
* Setter for property password.
*
* @param password New value of property password.
*/
public void setPassword(String password);
/**
* Getter for property name.
*
* @return Value of property name.
*/
public String getMBean();
/**
* Setter for property mbean.
*
* @param name New value of property mbean.
*/
public void setMBean(String mbean);
/**
* This class is an implementation of PortExt interface that provides java
* model for service port extensibility element.
*/
public static class PortExtImpl extends ExtModelImpl implements PortExt {
public PortExtImpl(WSDLModel model, Element e) {
super(model, e);
}
public PortExtImpl(WSDLModel model) {
this(model, createPrefixedElement(QN_PORT_EXT, model));
}
public void accept(ExtVisitor visitor) {
visitor.visit(this);
}
@Override
public boolean canBeAddedTo(Component target) {
if (target instanceof Port) {
return true;
}
return false;
}
public String getServiceURL() {
return getAttribute(ExtAttribute.SERVICE_URL);
}
public void setServiceURL(String serviceURL) {
setAttribute(ATTR_SERVICE_URL, ExtAttribute.SERVICE_URL, serviceURL);
}
public String getUsername() {
return getAttribute(ExtAttribute.USERNAME);
}
public void setUsername(String username) {
setAttribute(ATTR_USERNAME, ExtAttribute.USERNAME, username);
}
public String getPassword() {
return getAttribute(ExtAttribute.PASSWORD);
}
public void setPassword(String password) {
setAttribute(ATTR_PASSWORD, ExtAttribute.PASSWORD, password);
}
public String getMBean() {
return getAttribute(ExtAttribute.MBEAN);
}
public void setMBean(String mbean) {
setAttribute(ATTR_MBEAN, ExtAttribute.MBEAN, mbean);
}
}
}

View File

@ -0,0 +1,12 @@
# WSDL Wizard template resources for this biding extensions
#template group name. must be jbi component name for which this template is present.
TEMPLATEGROUP_name=BINDINGCOMPONENT
# wsdl extension prefix i18n property. TEMPLATEGROUP_prefix_{wsdlext_prefix}
# wsdlext_prefix is the prefix attribute value of templateGroup element in the template.xml
TEMPLATEGROUP_prefix_bindingcomponent=bindingcomponent
# template name i18n property. An entry per template element in the template.xml
# TEMPLATE_name_{t_name} t_name is the name attribute value of the template element in the template.xml
TEMPLATE_name_mybcTransport=mybc Transport

View File

@ -0,0 +1,24 @@
/*
* WSDLExtTemplateProvider.java
*/
package net.openesb.component.${artifactId}.template;
import java.io.InputStream;
import org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider;
import org.openide.util.NbBundle;
/**
* @author chikkala
*/
public class WSDLExtTemplateProvider extends ExtensibilityElementTemplateProvider {
private final String templateUrl = "template.xml"; // relative path.
public InputStream getTemplateInputStream() {
return this.getClass().getResourceAsStream(templateUrl);
}
public String getLocalizedMessage(String str, Object[] objects) {
return NbBundle.getMessage(this.getClass(), str, objects);
}
}

View File

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : template.xml
Description: Describes the binding's extensibility element views in WSDL wizard
-->
<templateGroup xmlns="http://xml.netbeans.org/schema/templates"
xmlns:xsi="http://www.w3.org/1999/XMLSchema/instance"
xsi:schemaLocation="http://xml.netbeans.org/schema/templates templates.xsd"
namespace="http://java.sun.com/jbi/wsdl-extensions/sample/jmx-bc/"
prefix="bindingcomponent">
<template name="${artifactId}Transport">
<wsdlElement name="Binding">
<!-- binding extension element attribute default values-->
<extensionElement name="binding">
<!-- TODO: add this extension elements any attribute default values here.
<extensionAttr name="my_attrib" defaultValue="my_attrib_default_value"/>
-->
</extensionElement>
</wsdlElement>
<wsdlElement name="BindingOperation">
<!-- binding operation extension element attribute default values-->
<extensionElement name="operation">
<!-- TODO: add this extension elements any attribute default values here.
<extensionAttr name="my_attrib" defaultValue="my_attrib_default_value"/>
-->
<extensionAttr name="action" defaultValue=""/>
</extensionElement>
</wsdlElement>
<wsdlElement name="BindingOperationInput">
<!-- binding operation input extension element attribute default values-->
<extensionElement name="input">
<!-- TODO: add this extension elements any attribute default values here.
<extensionAttr name="my_attrib" defaultValue="my_attrib_default_value"/>
-->
</extensionElement>
</wsdlElement>
<wsdlElement name="BindingOperationOutput">
<!-- binding operation output extension element attribute default values-->
<extensionElement name="output" >
<!-- TODO: add this extension elements any attribute default values here.
<extensionAttr name="my_attrib" defaultValue="my_attrib_default_value"/>
-->
</extensionElement>
</wsdlElement>
<wsdlElement name="BindingOperationFault">
<!-- binding operation fault extension element attribute default values-->
<extensionElement name="fault" >
<!-- TODO: add this extension elements any attribute default values here.
<extensionAttr name="my_attrib" defaultValue="my_attrib_default_value"/>
-->
</extensionElement>
</wsdlElement>
<wsdlElement name="ServicePort">
<!-- Port extension element attribute default values-->
<extensionElement name="address" >
<!-- TODO: add this extension elements any attribute default values here.
<extensionAttr name="my_attrib" defaultValue="my_attrib_default_value"/>
-->
<extensionAttr name="serviceURL" defaultValue="service:jmx:rmi:///jndi/rmi://localhost:8686/jmxrmi"/>
<extensionAttr name="username" defaultValue="admin"/>
<extensionAttr name="password" defaultValue="adminadmin"/>
<extensionAttr name="mbean" defaultValue="com.sun.jbi.sample.jmxbc:jmxbc-ep-address=${artifactId}/greetings"/>
</extensionElement>
</wsdlElement>
</template>
<!-- TODO: define any other template with other default values
<template name="template2">
...
</template>
-->
</templateGroup>

View File

@ -0,0 +1,229 @@
/*
* WSDLExtValidator.java
*/
package net.openesb.component.${artifactId}.validator;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import net.openesb.component.${artifactId}.model.BindingExt;
import net.openesb.component.${artifactId}.model.ExtVisitor;
import net.openesb.component.${artifactId}.model.FaultExt;
import net.openesb.component.${artifactId}.model.InputExt;
import net.openesb.component.${artifactId}.model.OperationExt;
import net.openesb.component.${artifactId}.model.OutputExt;
import net.openesb.component.${artifactId}.model.PortExt;
import org.netbeans.modules.xml.wsdl.model.Binding;
import org.netbeans.modules.xml.wsdl.model.BindingFault;
import org.netbeans.modules.xml.wsdl.model.BindingInput;
import org.netbeans.modules.xml.wsdl.model.BindingOperation;
import org.netbeans.modules.xml.wsdl.model.BindingOutput;
import org.netbeans.modules.xml.wsdl.model.Definitions;
import org.netbeans.modules.xml.wsdl.model.Port;
import org.netbeans.modules.xml.wsdl.model.Service;
import org.netbeans.modules.xml.wsdl.model.WSDLModel;
import org.netbeans.modules.xml.xam.Model;
import org.netbeans.modules.xml.xam.Model.State;
import org.netbeans.modules.xml.xam.spi.Validation;
import org.netbeans.modules.xml.xam.spi.Validation.ValidationType;
import org.netbeans.modules.xml.xam.spi.ValidationResult;
import org.netbeans.modules.xml.xam.spi.Validator;
import org.netbeans.modules.xml.xam.spi.Validator.ResultItem;
import org.openide.util.NbBundle;
/**
* This class implements the wsdl model validation with respect to the wsdl
* extension elements supported by the specific wsdl extension namespace.
*
* @author ${user}
*/
public class WSDLExtValidator implements Validator, ExtVisitor {
public static final Set<ResultItem> EMPTY_RESULT_ITEM = Collections.emptySet();
public static final Set<Model> EMPTY_MODEL = Collections.emptySet();
public static final ValidationResult EMPTY_RESULT = new ValidationResult(EMPTY_RESULT_ITEM, EMPTY_MODEL);
private Validation mValidation;
private ValidationType mValidationType;
private ValidationResult mValidationResult;
public WSDLExtValidator() {
}
/**
* @return name of the validation service.
*/
public String getName() {
return getClass().getName();
}
/**
* Validates given model.
*
* @param model model to validate.
* @param validation reference to the validation context.
* @param validationType the type of validation to perform
* @return ValidationResult.
*/
public ValidationResult validate(Model model, Validation validation, ValidationType validationType) {
mValidation = validation;
mValidationType = validationType;
HashSet<ResultItem> results = new HashSet<ResultItem>();
HashSet<Model> models = new HashSet<Model>();
models.add(model);
mValidationResult = new ValidationResult(results, models);
if (model instanceof WSDLModel) {
WSDLModel wsdlModel = (WSDLModel) model;
if (model.getState() == State.NOT_WELL_FORMED) {
return EMPTY_RESULT;
}
validateWSDLModel(wsdlModel, results); // validate WSDL Model
}
// Clear out our state
mValidation = null;
mValidationType = null;
return mValidationResult;
}
/**
* this method validates the WSDLModel and updates the result set with the
* possible ERRORs, ADVICEs or WARNINGS It calls each wsdl extension element
* models visitor method to validate each extension element. Modify this
* method to add more validations such as scope and limit of the extension
* elements etc.
*/
public void validateWSDLModel(WSDLModel wsdlModel, HashSet<ResultItem> results) {
//TODO: add any specific validations such as extension element size etc in addition
// to the element validation itself.
Definitions defs = wsdlModel.getDefinitions();
// for each binding
for (Binding binding : defs.getBindings()) {
// validate binding extensions
for (BindingExt bindingExt : binding.getExtensibilityElements(BindingExt.class)) {
bindingExt.accept(this);
}
// for each binding operation
for (BindingOperation bindingOp : binding.getBindingOperations()) {
// validate binding operation extensions
for (OperationExt operationExt : bindingOp.getExtensibilityElements(OperationExt.class)) {
operationExt.accept(this);
}
// validate binidng operation input extensions
BindingInput bindingInput = bindingOp.getBindingInput();
if (bindingInput != null) {
for (InputExt inputExt : bindingInput.getExtensibilityElements(InputExt.class)) {
inputExt.accept(this);
}
}
// validate binding operation output extensions
BindingOutput bindingOutput = bindingOp.getBindingOutput();
if (bindingOutput != null) {
for (OutputExt outputExt : bindingOutput.getExtensibilityElements(OutputExt.class)) {
outputExt.accept(this);
}
}
// validate binding operation fault extensions
for (BindingFault bindingFault : bindingOp.getBindingFaults()) {
for (FaultExt faultExt : bindingFault.getExtensibilityElements(FaultExt.class)) {
faultExt.accept(this);
}
}
}
}
// for each service
for (Service service : defs.getServices()) {
// for each port
for (Port port : service.getPorts()) {
// validate port extension
for (PortExt portExt : port.getExtensibilityElements(PortExt.class)) {
portExt.accept(this);
}
}
}
}
public void visit(BindingExt bindingExt) {
Collection<ResultItem> results = mValidationResult.getValidationResult();
//TODO: validate attributes and other required things and add appropriate results.
//
//results.add(
// new Validator.ResultItem(this, // validator
// Validator.ResultType.ERROR, // .ADVICE | .ERROR | .WARNING
// bindingExt, // Validated object
// NbBundle.getMessage(this.getClass(), "I18NKEY") // I18Ned message
// ));
//
}
public void visit(OperationExt operationExt) {
Collection<ResultItem> results = mValidationResult.getValidationResult();
//TODO: validate attributes and other required things and add appropriate results.
//
//results.add(
// new Validator.ResultItem(this, // validator
// Validator.ResultType.ERROR, // .ADVICE | .ERROR | .WARNING
// operationExt, // Validated object
// NbBundle.getMessage(this.getClass(), "I18NKEY") // I18Ned message
// ));
//
}
public void visit(InputExt inputExt) {
Collection<ResultItem> results = mValidationResult.getValidationResult();
//TODO: validate attributes and other required things and add appropriate results.
//
//results.add(
// new Validator.ResultItem(this, // validator
// Validator.ResultType.ERROR, // .ADVICE | .ERROR | .WARNING
// inputExt, // Validated object
// NbBundle.getMessage(this.getClass(), "I18NKEY") // I18Ned message
// ));
//
}
public void visit(OutputExt outputExt) {
Collection<ResultItem> results = mValidationResult.getValidationResult();
//TODO: validate attributes and other required things and add appropriate results.
//
//results.add(
// new Validator.ResultItem(this, // validator
// Validator.ResultType.ERROR, // .ADVICE | .ERROR | .WARNING
// outputExt, // Validated object
// NbBundle.getMessage(this.getClass(), "I18NKEY") // I18Ned message
// ));
//
}
public void visit(FaultExt faultExt) {
Collection<ResultItem> results = mValidationResult.getValidationResult();
//TODO: validate attributes and other required things and add appropriate results.
//
//results.add(
// new Validator.ResultItem(this, // validator
// Validator.ResultType.ERROR, // .ADVICE | .ERROR | .WARNING
// faultExt, // Validated object
// NbBundle.getMessage(this.getClass(), "I18NKEY") // I18Ned message
// ));
//
}
public void visit(PortExt portExt) {
Collection<ResultItem> results = mValidationResult.getValidationResult();
//TODO: validate attributes and other required things and add appropriate results.
//
//results.add(
// new Validator.ResultItem(this, // validator
// Validator.ResultType.ERROR, // .ADVICE | .ERROR | .WARNING
// portExt, // Validated object
// NbBundle.getMessage(this.getClass(), "I18NKEY") // I18Ned message
// ));
//
}
}

View File

@ -0,0 +1,43 @@
/*
* WSDLExtValidatorSchemaFactory.java
*/
package net.openesb.component.${artifactId}.validator;
import java.io.InputStream;
import java.io.InputStream;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import org.netbeans.modules.xml.wsdl.validator.spi.ValidatorSchemaFactory;
/**
* This class implements ValidatorSchemaFactory interface.
*
* @author chikkala
*/
public class WSDLExtValidatorSchemaFactory extends ValidatorSchemaFactory {
private final String NS_URL =
"http://java.sun.com/jbi/wsdl-extensions/sample/jmx-bc/";
private final String wsdlExtXSDResourcePath =
"/${artifactId}/mybcWsdlExt.xsd";
;
public String getNamespaceURI() {
return NS_URL;
}
public InputStream getSchemaInputStream() {
return this.getClass().getResourceAsStream(wsdlExtXSDResourcePath);
}
/**
* Returns the Inputstream related to this schema
*/
public Source getSchemaSource() {
InputStream in = this.getClass().getResourceAsStream(wsdlExtXSDResourcePath);
Source s = new StreamSource(in);
s.setSystemId(this.getClass().getResource(wsdlExtXSDResourcePath).toString());
return s;
}
}

View File

@ -0,0 +1,5 @@
#Wed Jul 24 14:12:01 IST 2013
package=it.pkg
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=basic

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : pom.xml
Created on : 23 July, 2013, 12:34 PM
Author : Paramjeet Singh, Logicoy
Description:
Maven project archetype for OpenESB Binding Component, that contains the
maven and netbeans build setup and component code to build and test the JBI Component.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>open-jbi-components</groupId>
<artifactId>binding-component-ojc-archetype</artifactId>
<version>2.3.0</version>
<packaging>jar</packaging>
<name>binding-component-ojc-archetype</name>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>2.2</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<description>Top-level Build for filebc-top</description>
<url>https://open-jbi-components.dev.java.net/filebc-top</url>
<distributionManagement>
<repository>
<id>openesb-release</id>
<name>OpenESB repo release</name>
<url>http://openesb-dev.org:8081/nexus/content/repositories/openesb-release/</url>
</repository>
<snapshotRepository>
<id>openesb-snapshot</id>
<name>OpenESB repo release</name>
<url>http://nexus.openesb-dev.org:8081/nexus/content/repositories/openesb-snapshot/</url>
</snapshotRepository>
</distributionManagement>
</project>

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : archetype descripter
Created on : 23 July, 2013, 12:34 PM
Author : Paramjeet Singh, Logicoy
Description:
Maven project archetype descripter for OpenESB Binding Component archetype, this contains All
necessory logic for building the archetype packages and classes.
-->
<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="filebc-top"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<requiredProperties>
<requiredProperty key="componentName">
<defaultValue>${artifactId}</defaultValue>
</requiredProperty>
</requiredProperties>
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>nbactions.xml</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory></directory>
<includes>
<include>smvn.bat</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module id="jbiadapter" dir="jbiadapter" name="filebcimpl">
<fileSets>
<!--<fileSet filtered="true" encoding="UTF-8">
<directory>test/com</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.java</include>
<include>**/*.properties</include>
<include>**/*.txt</include>
</includes>
</fileSet>-->
<fileSet filtered="true" encoding="UTF-8">
<directory>src/net</directory>
<includes>
<include>**/*.java</include>
<include>**/*.properties</include>
</includes>
</fileSet>
<!--<fileSet filtered="true" encoding="UTF-8">
<directory>test/test</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.java</include>
<include>**/*.properties</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>test/com</directory>
<includes>
<include>**/*.dat</include>
<include>**/*.lck</include>
<include>**/*.bpel</include>
<include>**/*.wsdl</include>
<include>**/*.xsd</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>test/test</directory>
<includes>
<include>**/*.wsdl</include>
</includes>
</fileSet>-->
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>nbactions.xml</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="installer" dir="packaging" name="installer">
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory>src</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<!--<fileSet encoding="UTF-8">
<directory>bld/classes</directory>
<includes>
<include>**/*.jar</include>
</includes>
</fileSet>-->
<fileSet encoding="UTF-8">
<directory>src</directory>
<includes>
<include>**/*.xsd</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory></directory>
<includes>
<include>nbactions.xml</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>

View File

@ -0,0 +1,75 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version="1.0" encoding="UTF-8"?>
<actions>
<action>
<actionName>clean</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>clean</goal>
</goals>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</action>
<action>
<actionName>build</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>install</goal>
</goals>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</action>
<action>
<actionName>test</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>package</goal>
</goals>
<properties>
<maven.test.skip>false</maven.test.skip>
</properties>
</action>
<action>
<actionName>rebuild</actionName>
<packagings>
<packaging>*</packaging>
</packagings>
<goals>
<goal>clean</goal>
<goal>install</goal>
</goals>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</action>
<action>
<actionName>CUSTOM-testreport</actionName>
<displayName>testreport</displayName>
<goals>
<goal>surefire-report:report-only</goal>
</goals>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</action>
<action>
<actionName>CUSTOM-allreports</actionName>
<displayName>allreports</displayName>
<goals>
<goal>site</goal>
</goals>
<properties>
<maven.test.skip>true</maven.test.skip>
</properties>
</action>
</actions>

View File

@ -0,0 +1,219 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
# BEGIN_HEADER - DO NOT EDIT
#
# The contents of this file are subject to the terms
# of the Common Development and Distribution License
# (the "License"). You may not use this file except
# in compliance with the License.
#
# You can obtain a copy of the license at
# https://open-jbi-components.dev.java.net/public/CDDLv1.0.html.
# See the License for the specific language governing
# permissions and limitations under the License.
#
# When distributing Covered Code, include this CDDL
# HEADER in each file and include the License file at
# https://open-jbi-components.dev.java.net/public/CDDLv1.0.html.
# If applicable add the following below this CDDL HEADER,
# with the fields enclosed by brackets "[]" replaced with
# your own identifying information: Portions Copyright
# [year] [name of copyright owner]
--><!--
# @(#)pom.xml
# Copyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved.
#
# END_HEADER - DO NOT EDIT
--><project>
<parent>
<artifactId>build-common</artifactId>
<groupId>open-jbi-components</groupId>
<version>1.1</version>
<relativePath>../../build-common</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>open-jbi-components</groupId>
<artifactId>${componentName}-jbiadapter</artifactId>
<name>${componentName}-jbiadapter</name>
<version>${version}</version>
<description>${componentName}-jbiadapter description</description>
<properties>
<component.name>sun-${componentName}-binding</component.name>
</properties>
<build>
<testOutputDirectory>bld/test</testOutputDirectory>
<testResources>
<testResource>
<directory>test</directory>
<excludes>
<!--
! need to replace the @variables@ in the .wsdl and .xml files
-->
<exclude>**/*.java</exclude>
<exclude>**/*.ref</exclude>
<exclude>**/.*</exclude>
<exclude>**/*.wsdl</exclude>
<exclude>**/*.pom</exclude>
</excludes>
</testResource>
</testResources>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- use ant junit instead of surefire. -->
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>${project.artifactId}-substitute-ant-variables</id>
<phase>process-test-resources</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<property name="project.build.directory" value="${project.build.directory}" />
<property name="project.build.testSourceDirectory" value="${project.build.testSourceDirectory}" />
<property name="SRCROOT" value="${SRCROOT}" />
<!-- create global filter rules: -->
<echo file="${project.build.directory}/filter" append="false">SRCROOT=${SRCROOT}
alaska_root=${SRCROOT}/ojc-core
alaska_sharedlibrary=${SRCROOT}/ojc-core/component-common
asadmin_cmd=bin/asadmin
asant_cmd=bin/asant
drivertest_dir=${SRCROOT}/ojc-core/driver-tests
encoder_sharedlibrary=${SRCROOT}/ojc-core/encodersl/encoder-
shell_cmd=sh
jbicomps_home=${SRCROOT}/ojc-core
tempdir=/tmp</echo>
<filter filtersfile="${project.build.directory}/filter" />
<copy todir="${project.build.directory}/test" overwrite="true" filtering="true" verbose="true" failonerror="false">
<fileset dir="${project.build.testSourceDirectory}">
<include name="**/*.xml" />
<include name="**/*.wsdl" />
<include name="**/*.properties" />
</fileset>
</copy>
</tasks>
</configuration>
</execution>
<execution>
<id>${project.artifactId}-ant-junit</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<patternset id="jbicomps.junit.test.patternset">
<include name="**/*Test*.java" />
<!-- exclude failing test. see IN=107976. RT 4/30/07 -->
<exclude name="**/com/sun/jbi/filebc/util/XmlUtilTest.java" />
<exclude name="**/test/jbi/integration/testbc/**" />
<exclude name="**/test/jbi/integration/test/**" />
<!-- comment out this line to run integration tests - need GF running -->
<exclude name="**/test/jbi/integration/testcases/*/*.java" />
</patternset>
<ant antfile="${SRCROOT}/global-common/m2.ant" dir="${project.build.sourceDirectory}/.." target="run_junit">
<property name="maven.test.skip" value="${maven.test.skip}" />
<property name="maven.repo.local" value="${maven.repo.local}" />
<property name="project.artifactId" value="${project.artifactId}" />
<property name="project.build.directory" value="${project.build.directory}" />
<property name="project.build.testSourceDirectory" value="${project.build.testSourceDirectory}" />
<property name="work.dir" value="${project.build.directory}" />
<!-- no junit system properties are needed: -->
<propertyset id="jbicomps.junit.sysproperties" />
<reference refid="maven.test.classpath" />
<reference refid="jbicomps.junit.sysproperties" />
<reference refid="jbicomps.junit.test.patternset" />
</ant>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Component-Version>${version}</Component-Version>
<Component-Name>${componentName}</Component-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>open-jbi-components</groupId>
<artifactId>componentsl</artifactId>
</dependency>
<!--<dependency>
<groupId>open-jbi-components</groupId>
<artifactId>encoder-fw</artifactId>
</dependency>-->
<dependency>
<groupId>open-jbi-components</groupId>
<artifactId>qos</artifactId>
</dependency>
<dependency>
<groupId>open-jbi-components</groupId>
<artifactId>compositelock</artifactId>
</dependency>
<!-- TEST DEPENDENCIES-->
<dependency>
<groupId>jbicompsplatform</groupId>
<artifactId>compileconf</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jmock</groupId>
<artifactId>jmock</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jmock</groupId>
<artifactId>jmock-cglib</artifactId>
<scope>test</scope>
</dependency>
<!--<dependency>
<groupId>net.sf.hulp.meas</groupId>
<artifactId>net.sf.hulp.meas.itf</artifactId>
<optional>true</optional>
<version>2.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>net.sf.hulp.meas</groupId>
<artifactId>net.sf.hulp.meas.impl</artifactId>
<optional>true</optional>
<version>2.1-SNAPSHOT</version>
</dependency>-->
<dependency>
<groupId>open-esb</groupId>
<artifactId>jbi-admin-common</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,52 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMX${componentName}LifeCycle.java
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.BasicComponentLifeCycle;
import net.openesb.component.${componentName}.common.DefaultMessageExchangeReceiver;
import net.openesb.component.${componentName}.common.MessageExchangeReceiver;
import net.openesb.component.${componentName}.common.RuntimeContext;
import javax.jbi.JBIException;
import javax.jbi.component.Component;
/**
* This class extends the basic ComponentLifeCycle implementation to provide
* component specific implementation of the ComponentLifeCycle.
*
* @see javax.jbi.ComponentLifeCycle
* @see com.sun.jbi.sample.component.common.BasicComponentLifeCycle
* @author chikkala
*/
public class JMXBindingComponentLifeCycle extends BasicComponentLifeCycle {
/**
* constructor for the ComponentLifecycle implementation.
*/
public JMXBindingComponentLifeCycle(Component compRuntime) {
super(compRuntime);
}
/**
* creates DefaultMessageExchangeReceiver to handles receiving and
* processing the message exchanges from the delivery channel.
*/
@Override
protected MessageExchangeReceiver createMessageExchangeReceiver() {
return new DefaultMessageExchangeReceiver();
}
/**
* chance to extended classes to do the component specific init
*
* @throws javax.jbi.JBIException
*/
@Override
protected void doInit() throws JBIException {
// NOOP
RuntimeContext.getInstance().setLogger(this.getClass().getName(), null);
}
}

View File

@ -0,0 +1,153 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingConsumerEndpoint.java
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.wsdlext.PortExt;
import net.openesb.component.${componentName}.wsdlext.WSDLExtHelper;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import net.openesb.component.${componentName}.common.deployment.ConsumerEndpoint;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor;
import net.openesb.component.${componentName}.common.deployment.ServiceUnit;
import javax.jbi.JBIException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanRegistrationException;
import javax.management.ObjectName;
import javax.management.StandardMBean;
import javax.wsdl.Definition;
import javax.xml.namespace.QName;
/**
* This class extends ConsumerEndpoint to implement the component specific
* consumer endpoint configuration. It uses JMXBindingConsumerProxy to receive
* messages from external service consumers and initiate the InOut message
* exchange. This implementation shows how a synchronous send/receive from the
* delivery channel will be used in InOut message exchange in a service
* invocation by the external consumers.
*
* @author chikkala
*/
public class JMXBindingConsumerEndpoint extends ConsumerEndpoint {
private ObjectName mJMXEndpointMBeanName;
private JMXEndpointMBean mJMXEndpointMBean;
/**
* Creates a new instance of XSLTProviderEndpoint
*/
public JMXBindingConsumerEndpoint(SUDescriptor.Consumes consumes, Definition wsdlDef, ServiceUnit su) {
super(consumes, wsdlDef, su);
}
@Override
protected void doInit() throws JBIException {
RuntimeHelper.getLogger().fine("JMXBindingEndpoint(Consumer): init called");
this.initJMXEndpoint();
}
@Override
protected void doActivate() throws JBIException {
RuntimeHelper.getLogger().fine("JMXBindingEndpoint(Consumer): activate called");
this.activateJMXEndpoint();
}
@Override
protected void doDeactivate() throws JBIException {
RuntimeHelper.getLogger().fine("JMXBindingEndpoint(Consumer): deactivate called");
this.deactivateJMXEndpoint();
}
@Override
protected void doClean() throws JBIException {
RuntimeHelper.getLogger().fine("JMXBindingEndpoint(Consumer): clean called");
this.cleanJMXEndpoint();
}
/**
* creates the JMXEndpointMBean implementation.
*/
protected JMXEndpointMBean createJMXEndpointMBean() {
// JMX EndpointMBean implementation that initiates in-out message exchange.
return new JMXBindingConsumerProxy(this);
}
/**
* get the mbean object name from the endpoint address of the jmx wsdl
* extension element
*/
protected ObjectName createJMXEndpointMBeanName() throws JBIException {
ObjectName mbeanObjectName = null;
try {
mbeanObjectName = new ObjectName(findMBeanNameFromWSDL());
} catch (Exception ex) {
throw new JBIException(ex);
}
return mbeanObjectName;
}
public final ObjectName getJMXEndpointMBeanName() {
return this.mJMXEndpointMBeanName;
}
public final JMXEndpointMBean getJMXEndpointMBean() {
return this.mJMXEndpointMBean;
}
protected final void initJMXEndpoint() throws JBIException {
// create jmx mbean resources
this.mJMXEndpointMBeanName = createJMXEndpointMBeanName();
this.mJMXEndpointMBean = createJMXEndpointMBean();
}
protected final void activateJMXEndpoint() throws JBIException {
// open jmx connectivity to external consumers by registering the
// external endpoint mbean implementation.
try {
StandardMBean mbean = new StandardMBean(this.mJMXEndpointMBean, JMXEndpointMBean.class);
this.getComponentContext().getMBeanServer().registerMBean(mbean, this.mJMXEndpointMBeanName);
} catch (Exception ex) {
throw new JBIException(ex);
}
}
protected final void deactivateJMXEndpoint() throws JBIException {
// close the jmx connectivity to external consumers by unregistering
// the external endpoint mbean.
try {
this.getComponentContext().getMBeanServer().unregisterMBean(this.mJMXEndpointMBeanName);
} catch (InstanceNotFoundException ex) {
ex.printStackTrace();
} catch (MBeanRegistrationException ex) {
ex.printStackTrace();
}
}
protected final void cleanJMXEndpoint() throws JBIException {
// release jmx mbean resources
this.mJMXEndpointMBean = null;
this.mJMXEndpointMBeanName = null;
}
/**
* get the mbean object name from the endpoint address of the jmx wsdl
* extension element
*/
protected String findMBeanNameFromWSDL() {
String mbeanName = null;
try {
QName serviceName = this.getService().getServiceName();
String endpointName = this.getService().getEndpointName();
Definition def = this.getWSDL();
PortExt address = WSDLExtHelper.getPortExt(def, serviceName, endpointName);
if (address != null) {
mbeanName = address.getMBean();
}
} catch (Exception ex) {
ex.printStackTrace();
}
return mbeanName;
}
}

View File

@ -0,0 +1,237 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingConsumerProxy.java
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.RuntimeHelper;
import net.openesb.component.${componentName}.common.deployment.ConsumerEndpoint;
import java.io.StringReader;
import javax.jbi.JBIException;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.Fault;
import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.NormalizedMessage;
import javax.wsdl.Operation;
import javax.wsdl.OperationType;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
/**
* This class acts as a proxy to the external service consumer that can receive
* messages from the external consumer using JMX interface and then initiate the
* InOut message exchange to invoke a service provided by the component in the
* jbi environment.
*
* this code shows how a synchronous send/receive messages from the delivery
* channel can be used in InOut message exchange to complete a service
* invocation.
*
* @author chikkala
*/
public class JMXBindingConsumerProxy implements JMXEndpointMBean {
/**
* Synchronous send timeout
*/
private static final long SEND_SYNC_TIMEOUT = 60000;
private ConsumerEndpoint mEndpoint;
private JMXBindingNormalizer mNormalizer;
/**
* Creates a new instance of JMXEndpointMBeanImpl
*/
public JMXBindingConsumerProxy(ConsumerEndpoint endpoint) {
this.mEndpoint = endpoint;
this.mNormalizer = new JMXBindingNormalizer(endpoint.getWSDL(), endpoint.getWSDLBinding());
}
public StringBuffer sendMessage(String operation, StringBuffer inputDoc) throws Exception {
// when receive input from external service consumer,
// 1. normalized the message, 2. send in-out message exchange. 3. denormalize out message.
Source inMsgSource = RuntimeHelper.createDOMSource(new StringReader(inputDoc.toString()));
QName operationQName = this.mEndpoint.getOperationQName(operation);
Source out = initiateMessageExchange(operationQName, inMsgSource);
StringBuffer outBuff = null;
if (out != null) {
// read the denormalized out message to string buffer.
outBuff = RuntimeHelper.readFromSource(out);
}
// return the out message content to the external service consumer.
return outBuff;
}
public Source initiateMessageExchange(QName operation, Source inSource) throws JBIException {
// 1. Decide what type of message exchange needed for this operation.
Source outSource = null;
try {
Operation wsdlOp = this.mEndpoint.getWSDLOperation(operation);
if (OperationType.REQUEST_RESPONSE.equals(wsdlOp.getStyle())) {
outSource = doInOutMessageExchange(operation, inSource);
} else if (OperationType.ONE_WAY.equals(wsdlOp.getStyle())) {
doInOnlyMessageExchange(operation, inSource);
} else {
throw new JBIException("Unsupported MEP " + wsdlOp.getStyle()
+ "for operation " + operation);
}
return outSource;
} catch (Exception ex) {
throw new JBIException(ex);
}
}
/**
* invokes the service provider with in-only message exchange sent to
* delivery channel by the consumer
*
* @param operation operation name on a service
* @param inSource input xml document for the InOut operation
* @throws java.lang.Exception if any error occurs in invoking the operation
* on the service.
* @return output xml document as a Source object received from InOut
* operation of the service invoked.
*/
private void doInOnlyMessageExchange(QName operation, Source inSource)
throws Exception {
// 2. normalized the message.
// 3. locate service endpoint
// 4. create message exchange according to the Opeations MEP
// get the component context and the delivery channel for preparing to send message
ComponentContext compContext = this.mEndpoint.getComponentContext();
DeliveryChannel channel = this.mEndpoint.getDeliveryChannel();
// create INOUT Message Exchange
InOnly inOnlyME = this.mEndpoint.createInOnlyMessageExchange(operation);
// set the content of the IN normalized message ( Normalize the message )
NormalizedMessage inMsg = inOnlyME.getInMessage();
Operation wsdlOperation = this.mEndpoint.getWSDLOperation(inOnlyME.getOperation());
this.mNormalizer.normalizeInput(wsdlOperation, inMsg, RuntimeHelper.sourceToDOMSource(inSource));
// send the message exchange and wait for response
boolean isSent = channel.sendSync(inOnlyME, SEND_SYNC_TIMEOUT);
if (!isSent) {
throw new Exception("JMXBinding:Timeout occured in sending the message to provider");
}
// check if you got a done message or error ( done or error are only allowed in in-only)
// process the Message Exchange to check for done or error message and
// complete InOut message exchange with provider
//TODO: put this below code in processInOnlyMessageExchangeOnConsumer()
ExchangeStatus status = inOnlyME.getStatus();
this.mEndpoint.getLogger().fine("Consumer:InOnly:Processing Message Exchange with status " + status);
if (ExchangeStatus.DONE.equals(status)) {
this.mEndpoint.getLogger().fine("Consumer: Completed the INONLY MessageExchange");
return;
} else if (ExchangeStatus.ERROR.equals(status)) {
// error can occur any time. so just return the error back to client.
Exception serverSideEx = inOnlyME.getError();
StringBuffer exMsgBuff = RuntimeHelper.getExceptionStackTrace(serverSideEx);
throw new Exception("Consumer:INONLY Message Exchange status ERROR.${symbol_escape}n" + exMsgBuff);
} else {
// any other status is error.
throw new Exception("Consumer:INONLY Message Exchange error. status: " + status);
}
}
/**
* invokes service provider with in-out message exchange sent to delivery
* channel by the consumer
*
* @param operation operation name on a service
* @param inSource input xml document for the InOut operation
* @throws java.lang.Exception if any error occurs in invoking the operation
* on the service.
* @return output xml document as a Source object received from InOut
* operation of the service invoked.
*/
private Source doInOutMessageExchange(QName operation, Source inSource)
throws Exception {
// 2. normalized the message.
// 3. locate service endpoint
// 4. create message exchange according to the Opeations MEP
// get the component context and the delivery channel for preparing to send message
ComponentContext compContext = this.mEndpoint.getComponentContext();
DeliveryChannel channel = this.mEndpoint.getDeliveryChannel();
// create INOUT Message Exchange
InOut inOutME = this.mEndpoint.createInOutMessageExchange(operation);
// set the content of the IN normalized message ( Normalize the message )
NormalizedMessage inMsg = inOutME.getInMessage();
Operation wsdlOperation = this.mEndpoint.getWSDLOperation(inOutME.getOperation());
this.mNormalizer.normalizeInput(wsdlOperation, inMsg, RuntimeHelper.sourceToDOMSource(inSource));
// send the message exchange and wait for response
boolean isSent = channel.sendSync(inOutME, SEND_SYNC_TIMEOUT);
if (!isSent) {
throw new Exception("JMXBinding:Timeout occured in sending the message to provider");
}
// check if you got a out message or fault or error
// process the Message Exchange to get the output message and
// complete InOut message exchange with provider
NormalizedMessage outMsg = processInOutMessageExchangeOnConsumer(inOutME);
Source outSource = this.mNormalizer.denormalizeOutput(wsdlOperation, outMsg);
return outSource;
}
/**
* takes the InOut message exchange received from sendSync call and
* processes it further to complete InOut message exchange with provider and
* returns the out message or throws exception in case of error or faults.
*/
private NormalizedMessage processInOutMessageExchangeOnConsumer(InOut inoutExchange)
throws Exception {
// InOut MessageExchange processing on consumer side
// 1. ACTIVE status receives a fault or out message,
// send the done status to complete message exchange
// return the fault/out message to external consumer
// 2. can not receive DONE status
// 3. when received ERROR status, return the error to consumer.
// process the message exchange based on its state.
ExchangeStatus status = inoutExchange.getStatus();
this.mEndpoint.getLogger().fine("Consumer:Processing Message Exchange with status " + status);
if (ExchangeStatus.ACTIVE.equals(status)) {
Fault fault = inoutExchange.getFault();
NormalizedMessage outMsg = inoutExchange.getOutMessage();
// send done to complete message exchange.
DeliveryChannel channel = this.mEndpoint.getDeliveryChannel();
inoutExchange.setStatus(ExchangeStatus.DONE);
channel.send(inoutExchange);
this.mEndpoint.getLogger().fine("Consumer: Completed the INOUT MessageExchange");
// process fault or out message
if (fault != null) {
// throw an exception if there is a fault message.
Source faultContent = fault.getContent();
StringBuffer faultContentBuff = null;
if (faultContent != null) {
faultContentBuff = RuntimeHelper.readFromSource(faultContent);
}
throw new Exception("Consumer:INOUT message exchange Fault ${symbol_escape}n"
+ faultContentBuff);
}
// return the outMessage for processing
if (outMsg != null) {
return outMsg;
} else {
throw new Exception("Consumer: Null Out message in INOUT message exchange. ");
}
} else if (ExchangeStatus.DONE.equals(status)) {
// can not get DONE on Consumer side in INOUT message exchange.
throw new Exception("Consumer: Illegal status DONE on INOUT message exchange");
} else if (ExchangeStatus.ERROR.equals(status)) {
// error can occur any time. so just return the error back to client.
Exception serverSideEx = inoutExchange.getError();
StringBuffer exMsgBuff = RuntimeHelper.getExceptionStackTrace(serverSideEx);
throw new Exception("Consumer:INOUT Message Exchange status ERROR.${symbol_escape}n" + exMsgBuff);
} else {
throw new Exception("Consumer:INOUT Message Exchange error. status: " + status);
}
}
}

View File

@ -0,0 +1,34 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingInstaller.java
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.ComponentInstaller;
/**
* This class extends the ComponentInstaller that implements the
* javax.jbi.component.Bootstrap for a component installation contract.
*
* If the default implemenation of the javax.jbi.component.Bootstrap in
* com.sun.jbi.sample.component.common.ComponentInstaller is not sufficient for
* this components install, uninstall and upgrade requirements, override the
* default implementation here to add component specific installation and
* upgrade tasks such as initializing configuration mbean and creating resources
* specific to component or upgrade workspace and service units during upgrading
* the component.
*
* @see javax.jbi.Bootstrap
* @see com.sun.jbi.sample.component.common.ComponentInstaller
* @author chikkala
*/
public class JMXBindingInstaller extends ComponentInstaller {
/**
* Constructor to create the ComponentInstaller.
*/
public JMXBindingInstaller() {
}
}

View File

@ -0,0 +1,242 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingNormalizer.java
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.wsdl.AbstractNormalizer;
import net.openesb.component.${componentName}.common.wsdl.WSDL11JBIWrapper;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import java.util.List;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.Fault;
import javax.wsdl.Input;
import javax.wsdl.Message;
import javax.wsdl.Operation;
import javax.wsdl.Output;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
* This class is a concrete implementation of the AbstractNormalizer to
* implement normalize jmx binding specific concrete messages to jbi wrapper
* messages and denormalize the jbi wrapper messages to jmx binding specific
* messages. The jmx binding concrete message has "message" as the root element
* that contains the part elements as its children. for example <jmxbc:message
* xmlns:jmxbc="http://java.sun.com/jbi/sample/jmx-bc/envelope/"
* xmlns:msgns="http://samples.com/wsdl/definition/types/"
* xmlns:wsdlns="http://samples.com/wsdl/definition/" >
* <msgns-ns:part1-elememnt/> <!-- part has element attribute -->
* <msgns:part2-elememnt/> <wsdlns:part3-type-name> <!-- part has type
* attribute. so element of the type are wrapped with part name -->
* <msgns:part3-type-elements> <wsdlns:part3-type-name> </jmxbc:message>
*
* This is the sample code that demonstrate how to normalize and denormalize
* messages to/from jbi wrapper from/to concrete messages specific to a binding
* protocol
*
* @author chikkala
*/
public class JMXBindingNormalizer extends AbstractNormalizer {
public static final String JMXBC_MSG_NS = "http://java.sun.com/jbi/sample/jmx-bc/envelope/";
public static final String DEF_NS_PREFIX = "jmxbc";
public static final String MESSAGE_EL = "message";
/**
* Creates a new instance of JMXBCNormalizer
*/
public JMXBindingNormalizer(Definition wsdl, Binding binding) {
super(wsdl, binding);
}
/**
* normalizes the jmx binding protocol specific concrete message to jbi
* normalized message
*/
public void normalizeInput(Operation operation, NormalizedMessage normMsg,
DOMSource msgSource) throws MessagingException {
try {
WSDL11JBIWrapper jbiWrapper = WSDL11JBIWrapper.createInputWrapper(operation);
Input input = operation.getInput();
Message wsdlMsg = input.getMessage();
//TODO: get the binding input extension here if needed.
Element jmxMessage = RuntimeHelper.getElement(msgSource);
if (!JMXBC_MSG_NS.equals(jmxMessage.getNamespaceURI())
|| !MESSAGE_EL.equals(jmxMessage.getLocalName())) {
throw new MessagingException("invalid root element for jmxbc envelope");
}
List<Element> jmxMsgParts = getChildElements(jmxMessage);
addMessagePartsToJBIWrapper(jbiWrapper, wsdlMsg, jmxMsgParts);
DOMSource wrappedSource = jbiWrapper.toDOMSource();
normMsg.setContent(wrappedSource);
} catch (ParserConfigurationException ex) {
throw new MessagingException(ex);
}
}
/**
* normalizes the jmx binding protocol specific concrete message to jbi
* normalized message
*/
public void normalizeOutput(Operation operation, NormalizedMessage normMsg,
DOMSource msgSource) throws MessagingException {
try {
WSDL11JBIWrapper jbiWrapper = WSDL11JBIWrapper.createInputWrapper(operation);
Output output = operation.getOutput();
Message wsdlMsg = output.getMessage();
//TODO: get the binding output extension here if needed.
Element jmxMessage = RuntimeHelper.getElement(msgSource);
if (!JMXBC_MSG_NS.equals(jmxMessage.getNamespaceURI())
|| !MESSAGE_EL.equals(jmxMessage.getLocalName())) {
throw new MessagingException("invalid root element for jmxbc envelope");
}
List<Element> jmxMsgParts = getChildElements(jmxMessage);
addMessagePartsToJBIWrapper(jbiWrapper, wsdlMsg, jmxMsgParts);
DOMSource wrappedSource = jbiWrapper.toDOMSource();
normMsg.setContent(wrappedSource);
} catch (ParserConfigurationException ex) {
throw new MessagingException(ex);
}
}
/**
* normalizes the jmx binding protocol specific concrete message to jbi
* normalized message
*/
public void normalizeFault(Operation operation, String faultName, NormalizedMessage normMsg,
DOMSource msgSource) throws MessagingException {
try {
WSDL11JBIWrapper jbiWrapper = WSDL11JBIWrapper.createInputWrapper(operation);
Fault wsdlFault = operation.getFault(faultName);
Message wsdlMsg = wsdlFault.getMessage();
//TODO: get the binding fault extension here if needed.
Element jmxMessage = RuntimeHelper.getElement(msgSource);
if (!JMXBC_MSG_NS.equals(jmxMessage.getNamespaceURI())
|| !MESSAGE_EL.equals(jmxMessage.getLocalName())) {
throw new MessagingException("invalid root element for jmxbc envelope");
}
List<Element> jmxMsgParts = getChildElements(jmxMessage);
addMessagePartsToJBIWrapper(jbiWrapper, wsdlMsg, jmxMsgParts);
DOMSource wrappedSource = jbiWrapper.toDOMSource();
normMsg.setContent(wrappedSource);
} catch (ParserConfigurationException ex) {
throw new MessagingException(ex);
}
}
/**
* denormalizes the jbi message to the jmx binding protocol specific
* concrete message.
*/
public DOMSource denormalizeInput(Operation operation, NormalizedMessage normMsg)
throws MessagingException {
try {
WSDL11JBIWrapper jbiWrapper = WSDL11JBIWrapper.sourceToWrapper(
RuntimeHelper.sourceToDOMSource(normMsg.getContent()));
Input input = operation.getInput();
Message wsdlMsg = input.getMessage();
//TODO: get the binding input extension here if needed.
Document jmxMsgDoc = jbiWrapper.getDocumentBuilder().newDocument();
Element jmxMessage = jmxMsgDoc.createElementNS(JMXBC_MSG_NS, DEF_NS_PREFIX + ":" + MESSAGE_EL);
jmxMessage.setAttributeNS(XMLNS_NS, "xmlns:" + DEF_NS_PREFIX, JMXBC_MSG_NS);
jmxMsgDoc.appendChild(jmxMessage);
List<Element> jmxMsgParts = getMessagePartsFromJBIWrapper(jbiWrapper, wsdlMsg);
for (int i = 0; i < jmxMsgParts.size(); ++i) {
jmxMessage.appendChild(jmxMsgDoc.importNode(jmxMsgParts.get(i), true));
}
DOMSource unwrappedSource = new DOMSource(jmxMsgDoc);
return unwrappedSource;
} catch (DOMException ex) {
throw new MessagingException(ex);
} catch (ParserConfigurationException ex) {
throw new MessagingException(ex);
}
}
/**
* denormalizes the jbi message to the jmx binding protocol specific
* concrete message.
*/
public DOMSource denormalizeOutput(Operation operation, NormalizedMessage normMsg)
throws MessagingException {
try {
WSDL11JBIWrapper jbiWrapper = WSDL11JBIWrapper.sourceToWrapper(
RuntimeHelper.sourceToDOMSource(normMsg.getContent()));
Output output = operation.getOutput();
Message wsdlMsg = output.getMessage();
//TODO: get the binding output extension here if needed.
Document jmxMsgDoc = jbiWrapper.getDocumentBuilder().newDocument();
Element jmxMessage = jmxMsgDoc.createElementNS(JMXBC_MSG_NS, DEF_NS_PREFIX + ":" + MESSAGE_EL);
jmxMessage.setAttributeNS(XMLNS_NS, "xmlns:" + DEF_NS_PREFIX, JMXBC_MSG_NS);
List<Element> jmxMsgParts = getMessagePartsFromJBIWrapper(jbiWrapper, wsdlMsg);
for (int i = 0; i < jmxMsgParts.size(); ++i) {
jmxMessage.appendChild(jmxMsgDoc.importNode(jmxMsgParts.get(i), true));
}
jmxMsgDoc.appendChild(jmxMessage);
DOMSource unwrappedSource = new DOMSource(jmxMsgDoc);
return unwrappedSource;
} catch (DOMException ex) {
throw new MessagingException(ex);
} catch (ParserConfigurationException ex) {
throw new MessagingException(ex);
}
}
/**
* denormalizes the jbi message to the jmx binding protocol specific
* concrete message.
*/
public DOMSource denormalizeFault(Operation operation, String faultName, NormalizedMessage normMsg)
throws MessagingException {
try {
WSDL11JBIWrapper jbiWrapper = WSDL11JBIWrapper.sourceToWrapper(
RuntimeHelper.sourceToDOMSource(normMsg.getContent()));
Fault wsdlFault = operation.getFault(faultName);
Message wsdlMsg = wsdlFault.getMessage();
//TODO: get the binding fault extension here if needed.
Document jmxMsgDoc = jbiWrapper.getDocumentBuilder().newDocument();
Element jmxMessage = jmxMsgDoc.createElementNS(JMXBC_MSG_NS, DEF_NS_PREFIX + ":" + MESSAGE_EL);
jmxMessage.setAttributeNS(XMLNS_NS, "xmlns:" + DEF_NS_PREFIX, JMXBC_MSG_NS);
List<Element> jmxMsgParts = getMessagePartsFromJBIWrapper(jbiWrapper, wsdlMsg);
for (int i = 0; i < jmxMsgParts.size(); ++i) {
jmxMessage.appendChild(jmxMsgDoc.importNode(jmxMsgParts.get(i), true));
}
jmxMsgDoc.appendChild(jmxMessage);
DOMSource unwrappedSource = new DOMSource(jmxMsgDoc);
return unwrappedSource;
} catch (DOMException ex) {
throw new MessagingException(ex);
} catch (ParserConfigurationException ex) {
throw new MessagingException(ex);
}
}
}

View File

@ -0,0 +1,87 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingProviderEndpoint.java
*
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.wsdlext.PortExt;
import net.openesb.component.${componentName}.wsdlext.WSDLExtHelper;
import net.openesb.component.${componentName}.common.MessageExchangeHandler;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import net.openesb.component.${componentName}.common.MessageExchangeListener;
import net.openesb.component.${componentName}.common.deployment.ProviderEndpoint;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor;
import net.openesb.component.${componentName}.common.deployment.ServiceUnit;
import java.util.logging.Level;
import javax.jbi.JBIException;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.wsdl.Definition;
import javax.xml.namespace.QName;
/**
* This class extends the ProviderEndpoint to implement component specific
* endpoint configuration. It implements the MessageExchangeListener to receive
* message exchange notifications from the MessageExchangeSupport fired by
* MessageExchangeReceiver and process it using a message exchange handler to
* show how an asynchronous processing of message exchange can be done.
*
* This endpoint uses the JMXBindingProviderProxy as a message exchange handler
* that can invoke the external provider to send a message and receive the
* response in a InOut message exchange.
*
* @author chikkala
*/
public class JMXBindingProviderEndpoint extends ProviderEndpoint implements MessageExchangeListener {
JMXBindingProviderProxy mProviderProxy;
/**
* Creates a new instance of XSLTProviderEndpoint
*/
public JMXBindingProviderEndpoint(SUDescriptor.Provides provides, Definition wsdlDef, ServiceUnit su) {
super(provides, wsdlDef, su);
}
@Override
public void doInit() throws JBIException {
RuntimeHelper.getLogger().info("JMXBindingProviderEndpoint:doInit called");
this.mProviderProxy = new JMXBindingProviderProxy(this);
}
@Override
public MessageExchangeHandler createMessageExchangeHandler() {
return this.mProviderProxy;
}
@Override
protected MessageExchangeListener createMessageExchangeListener() {
return this;
}
public void messageExchangeReceived(ExchangeStatus status, MessageExchange me) {
try {
RuntimeHelper.getLogger().fine("MXListener.MessageExchangeReceived: with Status: " + status);
processMessageExchangeWithHandler(status, me);
// processMessageExchange(me);
} catch (Exception ex) {
ex.printStackTrace();
}
}
public PortExt getJMXProviderInfo() {
PortExt portExt = null;
try {
QName serviceName = this.getService().getServiceName();
String endpointName = this.getService().getEndpointName();
Definition def = this.getWSDL();
portExt = WSDLExtHelper.getPortExt(def, serviceName, endpointName);
} catch (Exception ex) {
getLogger().log(Level.FINE, ex.getMessage(), ex);
}
return portExt;
}
}

View File

@ -0,0 +1,235 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingProviderProxy.java
*
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.wsdlext.PortExt;
import net.openesb.component.${componentName}.common.AbstractMessageExchangeHandler;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;
import javax.jbi.JBIException;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.Fault;
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.wsdl.Operation;
import javax.xml.namespace.QName;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
/**
* This is a provider side implementation of the message exchange handler on a
* binding component which acts as a service provider proxy for the external
* provider. During the message exchange processing of the InOut message
* exchange, this handler acting as a proxy to the external provider invokes the
* service operation on the external provider and does required normalization
* and denormalization in processing out and in messages received from or send
* to the external service provider.
*
* @author chikkala
*/
public class JMXBindingProviderProxy extends AbstractMessageExchangeHandler {
private JMXBindingProviderEndpoint mEndpoint;
private String mServiceURL;
private String mUsername;
private String mPassword;
private String mMBeanName;
private JMXBindingNormalizer mNormalizer;
/**
* Creates a new instance of ProviderSEMXHandler
*/
public JMXBindingProviderProxy(JMXBindingProviderEndpoint endpoint) {
this.mEndpoint = endpoint;
PortExt jmxInfo = this.mEndpoint.getJMXProviderInfo();
this.mServiceURL = jmxInfo.getServiceURL();
this.mUsername = jmxInfo.getUsername();
this.mPassword = jmxInfo.getPassword();
this.mMBeanName = jmxInfo.getMBean();
this.mNormalizer = new JMXBindingNormalizer(endpoint.getWSDL(), endpoint.getWSDLBinding());
}
protected Logger getLogger() {
return this.mEndpoint.getLogger();
}
protected DeliveryChannel getDeliveryChannel() {
return this.mEndpoint.getDeliveryChannel();
}
protected void validateMessageExchange() throws MessagingException {
MessageExchange msgExchange = this.getMessageExchange();
if (this.getMessageExchange() == null) {
throw new MessagingException("MessageExchange Object is null in MessageExchageHandler");
}
if (MessageExchange.Role.CONSUMER.equals(msgExchange.getRole())) {
throw new MessagingException("Provider Message Exchange Handler can not have MessageExchange with CONSUMER Role");
}
if (!(msgExchange instanceof InOut)) {
throw new MessagingException("InOut Message Exchange Handler MessageExchange object should be instanceof javax.jbi.messaging.InOut ");
}
}
protected void processError(Exception ex) {
MessageExchange msgExchange = this.getMessageExchange();
Exception errEx = msgExchange.getError(); // get the error and print
RuntimeHelper.getLogger().info(
"InOut Message Exchange Provider received Error: " + errEx.getMessage());
msgExchange.getError().printStackTrace();
}
protected void processDone() {
MessageExchange msgExchange = this.getMessageExchange();
RuntimeHelper.getLogger().info("InOut Message Exchange Provider received DONE :"
+ " END of service invocation");
}
protected void processFault(Fault fault) {
MessageExchange msgExchange = this.getMessageExchange();
RuntimeHelper.logError("InOut Message Exchange Provider Handler can not receive Fault on Provider side");
}
protected void processMessage() {
try {
processInMessageOnProvider((InOut) this.getMessageExchange());
} catch (JBIException ex) {
ex.printStackTrace();
}
}
protected void processInMessageOnProvider(InOut inOutExchange) throws JBIException {
RuntimeHelper.getLogger().fine("Processing In Message on Provider side " + inOutExchange);
// receive IN message.
NormalizedMessage inMsg = inOutExchange.getInMessage();
NormalizedMessage outMsg = null;
Fault fault = null;
DOMSource inContent = null;
DOMSource outContent = null;
Source faultContent = null;
String faultAsText = null;
QName opName = inOutExchange.getOperation();
QName svcName = inOutExchange.getEndpoint().getServiceName();
Operation wsdlOperation = this.mEndpoint.getWSDLOperation(opName);
// process in message
// invoke the service operation
try {
inContent = this.mNormalizer.denormalizeInput(wsdlOperation, inMsg);
StringBuffer outputDoc = invokeOperation(opName.getLocalPart(),
RuntimeHelper.readFromDOMSource(inContent));
outContent = RuntimeHelper.createDOMSource(new StringReader(outputDoc.toString()));
} catch (Exception ex) {
// exception invoking the operation. so, set exception text as fault content.
ex.printStackTrace();
faultAsText = RuntimeHelper.getExceptionAsText(ex);
String faultText = RuntimeHelper.getExceptionAsXmlText(ex);
faultContent = RuntimeHelper.createDOMSource(new StringReader(faultText));
}
// set out or fault message
if (outContent != null) {
// set the out message content.
outMsg = inOutExchange.createMessage();
inOutExchange.setOutMessage(outMsg);
this.mNormalizer.normalizeOutput(wsdlOperation, outMsg, outContent);
// outMsg.setContent(outContent);
} else if (faultContent != null) {
fault = inOutExchange.createFault();
inOutExchange.setFault(fault);
fault.setContent(faultContent); // may need to normalize the content.
}
// send out or fault message.
this.send();
}
protected StringBuffer invokeOperation(String operation, StringBuffer inputDoc) throws MessagingException {
try {
StringBuffer outputDoc = invokeSendMessage(this.mServiceURL, this.mUsername, this.mPassword,
this.mMBeanName, operation, inputDoc);
return outputDoc;
} catch (Exception ex) {
ex.printStackTrace();
throw new MessagingException(ex);
}
}
/**
* invokes a jmx mbean to send message.
*/
protected StringBuffer invokeSendMessage(String serviceURL, String username, String password,
String mbeanName, String operation, StringBuffer inputDoc)
throws MessagingException {
JMXConnector jmxConnector = null;
MBeanServerConnection jmxConn = null;
JMXServiceURL jmxURL = null;
ObjectName epAddressName = null;
Map<String, Object> env = new HashMap<String, Object>();
if (username != null) {
String[] credentials = new String[]{username, password};
env.put("jmx.remote.credentials", credentials);
env.put(JMXConnectorFactory.DEFAULT_CLASS_LOADER, this.getClass().getClassLoader());
}
StringBuffer outDoc = null;
Object result = null;
String mbeanOperation = "sendMessage";
Object[] params = new Object[2];
params[0] = operation;
params[1] = inputDoc;
String[] signature = new String[2];
signature[0] = "java.lang.String";
signature[1] = "java.lang.StringBuffer";
try {
jmxURL = new JMXServiceURL(serviceURL);
epAddressName = new ObjectName(mbeanName);
jmxConnector = JMXConnectorFactory.connect(jmxURL, env);
jmxConn = jmxConnector.getMBeanServerConnection();
result = jmxConn.invoke(epAddressName, mbeanOperation, params, signature);
if (result != null) {
outDoc = (StringBuffer) result;
}
} catch (Exception ex) {
throw new MessagingException(ex);
} finally {
if (jmxConnector != null) {
try {
jmxConnector.close();
} catch (IOException ex) {
RuntimeHelper.logDebug(ex);
// ingore
}
}
}
return outDoc;
}
}

View File

@ -0,0 +1,57 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingRuntime.java
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.ComponentRuntime;
import javax.jbi.component.ComponentLifeCycle;
import javax.jbi.component.ServiceUnitManager;
/**
* This class extends the ComponentRuntime that implements
* javax.jbi.component.Component interface required for the component contract
* at runtime.
*
* This class provides the component specific ComponentLifeCycle implementation
* as well as the component specific ServiceUnitManager implementation.
*
* Add any additional component runtime specific functionality here.
*
* @see javax.jbi.component.Component
* @see com.sun.jbi.sample.component.common.ComponentRuntime
* @see com.sun.jbi.sample.component.common.BasicComponentLifecycle
* @see
* com.sun.jbi.sample.component.common.deployment.AbstractServiceUnitManager
* @author chikkala
*/
public class JMXBindingRuntime extends ComponentRuntime {
/**
* Creates a new instance of MyBindingRuntime
*/
public JMXBindingRuntime() {
super();
}
/**
* overriding the parent's createComponentLifeCycle to create MyBinding
* specific component lifecycle implementation.
*/
@Override
protected ComponentLifeCycle createComponentLifeCycle() {
return new JMXBindingComponentLifeCycle(this);
}
/**
* if this component supports service unit deployment, then return the
* service unit manager, else return null. Extended classes can override
* this method and do their own ServiceUnitManager specific creation.
*/
@Override
protected ServiceUnitManager createServiceUnitManager() {
return new JMXBindingSUManager(this);
}
}

View File

@ -0,0 +1,51 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingSUManager.java
*
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.RuntimeHelper;
import net.openesb.component.${componentName}.common.deployment.AbstractServiceUnitManager;
import net.openesb.component.${componentName}.common.deployment.ServiceUnit;
import java.util.logging.Logger;
import javax.jbi.management.DeploymentException;
/**
* This class extends the AbstractServiceUnitManager to implement component
* specific service unit manager by creating the component specific ServiceUnit
* implementation.
*
* @see
* com.sun.jbi.sample.component.common.deployment.AbstractServiceUnitManager
* @see com.sun.jbi.sample.component.common.deployment.ServiceUnit
*
* @author chikkala
*/
public class JMXBindingSUManager extends AbstractServiceUnitManager {
private JMXBindingRuntime mRuntime;
/**
* Creates a new instance of JMXBindingSUManager
*/
public JMXBindingSUManager(JMXBindingRuntime compRuntime) {
super();
this.mRuntime = compRuntime;
}
protected Logger getLogger() {
return RuntimeHelper.getLogger();
}
protected String getComponentName() {
return RuntimeHelper.getComponentName();
}
//TODO implement ProviderSEServiceUnit
protected ServiceUnit createServiceUnit(String suName, String suRootPath) throws DeploymentException {
return new JMXBindingServiceUnit(suName, suRootPath);
}
}

View File

@ -0,0 +1,55 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingServiceUnit.java
*
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.common.deployment.ConsumerEndpoint;
import net.openesb.component.${componentName}.common.deployment.ProviderEndpoint;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Consumes;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Provides;
import net.openesb.component.${componentName}.common.deployment.ServiceUnit;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import javax.jbi.management.DeploymentException;
import javax.wsdl.Definition;
/**
* This class extends the ServiceUnit to implement the component specific
* service unit processing. It creates the component specific ProviderEndpoint
* and ConsumerEndpoint implementation to configure the service provider and
* consumer endpoints on this component deployed in the service unit.
*
* @author chikkala
*/
public class JMXBindingServiceUnit extends ServiceUnit {
/**
* Creates a new instance of ProviderSEServiceUnit
*/
public JMXBindingServiceUnit(String suName, String suRootPath) {
super(suName, suRootPath);
}
@Override
protected WSDLProcessor createWSDLProcessor() {
return new JMXBindingWSDLProcessor(this.getSURootPath());
}
@Override
protected ConsumerEndpoint createConsumerEndpoint(Consumes consumes, Definition wsdlDef) {
return new JMXBindingConsumerEndpoint(consumes, wsdlDef, this);
}
@Override
protected ProviderEndpoint createProviderEndpoint(Provides provides, Definition wsdlDef) {
return new JMXBindingProviderEndpoint(provides, wsdlDef, this);
}
@Override
protected void loadOtherArtifacts() throws DeploymentException {
//TODO: load any component specific service unit artifacts
}
}

View File

@ -0,0 +1,43 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXBindingWSDLProcessor.java
*
*/
package net.openesb.component.${componentName};
import net.openesb.component.${componentName}.wsdlext.WSDLExtensionRegistry;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import javax.wsdl.extensions.ExtensionRegistry;
/**
* This class extends form the WSDLProcessor to configure the wsdl processor use
* the wsdl extension registry configured to process the binding specific
* extension elements in the wsdl documents.
*
* WSDLExtensionRegistry that is created here has the wsdl extension model
* required to process the extension elements specific to the binding used by
* this binding component.
*
* @author chikkala
*/
public class JMXBindingWSDLProcessor extends WSDLProcessor {
private WSDLExtensionRegistry mExtRegistry;
/**
* Creates a new instance of JMXBindingWSDLProcessor
*/
public JMXBindingWSDLProcessor(String wsdlDir) {
super(wsdlDir);
}
@Override
protected ExtensionRegistry getExtensionRegistry() {
if (this.mExtRegistry == null) {
this.mExtRegistry = new WSDLExtensionRegistry();
}
return this.mExtRegistry;
}
}

View File

@ -0,0 +1,41 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* JMXEndpointMBean.java
*/
package net.openesb.component.${componentName};
/**
* The sample BC implemented as a jmx binding component exposes this interface
* as a external connectivity (endpoint address) to the external service
* consumers that can exchange messages over jmx protocol to invoke services
* provided inside jbi environment.
*
* A jmx client can send a message by invoking this method using jmx management
* interface. When this mbean method is executed in the BC as a result of mbean
* call from the jmx client, the BC acts as a proxy service consumer inside the
* jbi environment and starts a message exchange with the service provider.
*
* If the operation being executed is a InOut operation, the BC should return
* the Out or Fault message from the InOut message exchange as a return value to
* complete invocation of the service by the external consumer.
*
* @author chikkala
*/
public interface JMXEndpointMBean {
/**
* This method will be called by a jmx client as a service consumer to send
* message to the echo service provider to invoke the service for a InOut
* message exchange.
*
* @param operation operation name on a service
* @param inputDoc input xml document for the InOut operation
* @return output xml document in a StringBuffer received from InOut
* operation of the service invoked. or null if the operation is InOnly.
* @throws java.lang.Exception if any error occurs in invoking the operation
* on the service.
*/
StringBuffer sendMessage(String operation, StringBuffer inputDoc) throws Exception;
}

View File

@ -0,0 +1,141 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractMessageExchangeHandler.java
*
*/
package net.openesb.component.${componentName}.common;
import java.io.StringReader;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.Fault;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.xml.namespace.QName;
/**
* This class is an abstract implementation of the MessageExchangeHandler which
* provides the base implementation of the ME processing and provides hooks to
* extended classes to implement component specific processing.
*
* @author chikkala
*/
public abstract class AbstractMessageExchangeHandler implements MessageExchangeHandler {
public static String IN_MESSAGE = "in";
public static String OUT_MESSAGE = "out";
private MessageExchange mMessageExchange;
private ExchangeStatus mStatus;
/** Creates a new instance of AbstractMessageExchangeHandler */
protected AbstractMessageExchangeHandler() {
this.mMessageExchange = null;
}
protected abstract Logger getLogger();
protected abstract DeliveryChannel getDeliveryChannel();
protected abstract void validateMessageExchange() throws MessagingException;
protected abstract void processError(Exception ex);
protected abstract void processDone();
protected abstract void processMessage();
protected abstract void processFault(Fault fault);
public final MessageExchange getMessageExchange() {
return this.mMessageExchange;
}
public final void setMessageExchange(MessageExchange msgExchange) {
this.mMessageExchange = msgExchange;
}
public final ExchangeStatus getMessageExchangeStatus() {
if ( this.mStatus != null ) {
return this.mStatus;
} else if ( this.mMessageExchange != null ) {
return this.mMessageExchange.getStatus();
} else {
return null;
}
}
public final void setMessageExchangeStatus(ExchangeStatus status) {
this.mStatus = status;
}
protected void send() throws MessagingException {
this.getDeliveryChannel().send(this.mMessageExchange);
}
protected boolean sendSync(long timeout) throws MessagingException {
return this.getDeliveryChannel().sendSync(this.mMessageExchange, timeout);
}
protected void sendDone() throws MessagingException {
this.mMessageExchange.setStatus(ExchangeStatus.DONE);
this.getDeliveryChannel().send(this.mMessageExchange);
}
protected void sendError(Exception ex) throws MessagingException {
this.mMessageExchange.setError(ex);
this.getDeliveryChannel().send(this.mMessageExchange);
}
protected void sendFault(Exception ex, QName type, String name) throws MessagingException {
Fault fault = this.mMessageExchange.createFault();
if ( ex != null ) {
String xmlText = RuntimeHelper.getExceptionAsXmlText(ex);
fault.setContent(RuntimeHelper.createDOMSource(new StringReader(xmlText)));
}
this.mMessageExchange.setFault(fault);
this.getDeliveryChannel().send(this.mMessageExchange);
}
protected void processActive() {
Fault fault = this.getMessageExchange().getFault();
if ( fault != null ) {
processFault(fault);
} else {
processMessage();
}
}
/**
* implementation of the MessageExchangeHandler${symbol_pound}processMessageExchange method.
*/
public void processMessageExchange(ExchangeStatus status, MessageExchange msgEx) {
getLogger().fine("MessageExchangeHandler.processMessageExchange:status: " + status );
this.setMessageExchangeStatus(status);
this.setMessageExchange(msgEx);
try {
validateMessageExchange();
} catch (MessagingException ex) {
getLogger().log(Level.FINE, "Invalid message exchange for processing ", ex);
if ( this.getMessageExchange() != null ) {
try {
sendError(ex);
} catch (MessagingException errEx) {
getLogger().log(Level.FINE, "Can not send invalid message exchange error", errEx);
}
}
return;
}
MessageExchange msgExchange = this.getMessageExchange();
if (ExchangeStatus.ACTIVE.equals(status) ) {
processActive();
} else if (ExchangeStatus.DONE.equals(status) ) {
processDone();
} else if (ExchangeStatus.ERROR.equals(status) ) {
processError(msgExchange.getError());
}
}
}

View File

@ -0,0 +1,398 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractComponentLifeCycle.java
*/
package net.openesb.component.${componentName}.common;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jbi.JBIException;
import javax.jbi.component.Component;
import javax.jbi.component.ComponentContext;
import javax.jbi.component.ComponentLifeCycle;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.MessagingException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.StandardMBean;
/**
* This class implements the javax.jbi.component.ComponentLifeCycle. This is an
* abstract class that keeps the reference to the component context and the lifecycle
* extension mbeans. It implements the lifecycle method and provide the extended methods
* for each lifecycle methods to implement component specific functionality.
*<p>
* It makes sure that the mininum initialization required for the component
* lifecycle is implemented by this class or the classes extending this class.
*<p>
* Another important functionality implemented in this class is that it initializes the global
* RuntimeContext for the component with the ComponentContext passed by the JBI runtime and the
* opened delivery channel to make them available globally to any class in the component implementation
* that may need it during component lifecycle
*<p>
* Service engine or a binding component lifecycle implementation can directly extend
* this class for their required functionality and override some of the methods to provide
* their own implementation.
*
* @see javax.jbi.ComponentLifeCycle
* @author chikkala
*/
public class BasicComponentLifeCycle implements ComponentLifeCycle {
/** reference to the component runtime */
private Component mCompRuntime;
/** component context */
private ComponentContext mComponentContext;
/** Extension Mbean Name*/
private ObjectName mExtensionMBeanName;
/** Extension Mbean Implementation*/
private StandardMBean mExtensionMBeanImpl;
/** a message receiver that accepts messages from delivery channel */
private MessageExchangeReceiver mMsgExchReceiver;
/**
* constructor for the ComponentLifecycle implementation.
* @param compRuntime
*/
protected BasicComponentLifeCycle(Component compRuntime) {
this.mCompRuntime = compRuntime;
}
/**
* @return Component
*/
public final Component getComponentRuntime() {
return this.mCompRuntime;
}
/**
* @return ComponentContext component context.
*/
public final ComponentContext getComponentContext() {
return mComponentContext;
}
/**
* @return component name
*/
protected String getComponentName() {
return (this.mComponentContext != null) ?
this.mComponentContext.getComponentName() : null;
}
///////////////////////////////////////////////////////////////////////////
// ComponentLifeCycle interface implemenation
///////////////////////////////////////////////////////////////////////////
/**
* Initializes the component lifecycle. This method makes sure that the
* component context passed by the jbi runtime is saved in the lifecycle
* object before calling the other component initialization methods to
* completely initialize the component.
* @param context Component context
* @see javax.jbi.component.ComponentLifeCycle${symbol_pound}init(javax.jbi.component.ComponentContext)
* @throws javax.jbi.JBIException on error
*/
public final void init(ComponentContext context) throws JBIException {
if ( context == null ) {
throw new JBIException("Null Component Context received in " +
"Component Lifecycle init ");
}
this.mComponentContext = context; // 0. save the component context passed by jbi framework.
// initialize the content
initGlobalContext(); // 1. Initialize component runtime context.
registerExtensionMBean(); // 2. Create and register extension mbean.
openDeliveryChannel(); // 3. Open delivery channel.
initMessageExchangeReceiver(); // 4. Create message exchange receiver.
doInit(); // 5. Do any component specific initialization such
// as static service providers and consumers initialization.
this.getLogger().fine("Component " + this.getComponentName() + " initialized");
}
/**
* Starts the component. Extended classes can override/implement the methods called
* in this method to provide component specify start functionality.
*
* @see javax.jbi.component.ComponentLifeCycle${symbol_pound}start()
* @throws javax.jbi.JBIException on error
*/
public final void start() throws JBIException {
doStart(); // 1. do any other component specific start tasks such as
// activating any static service providers and consumers.
startMessageExchangeProcessing(); // 2. begin accepting and processing message exchanges.
this.getLogger().fine("Component " + this.getComponentName() + " started");
}
/**
* Stop the component.Extended classes can override/implement the methods called
* in this method to provide component specify stop functionality.
* @throws javax.jbi.JBIException
* @see javax.jbi.component.ComponentLifeCycle${symbol_pound}stop()
*/
public final void stop() throws JBIException {
stopMessageExchangeProcessing(); // 1. stop accepting and processing message exchanges.
doStop(); // 2. do any other component specific stop tasks such as
// deactivating any static service providers and consumers.
this.getLogger().fine("Component " + this.getComponentName() + " stopped.");
}
/**
* Shut down the component. Extended classes can override/implement the methods called
* in this method to provide component specify shut down functionality.
* @throws javax.jbi.JBIException
* @see javax.jbi.component.ComponentLifeCycle${symbol_pound}shutDown()
*/
public final void shutDown() throws JBIException {
// clean up all resources.
shutdownMessageExchangeReceiver(); // 1. remove the message receiver.
closeDeliveryChannel(); // 2. close delivery channel
unregisterExtensionMBean(); // 3. unregister and remove extension mbean if exists.
doShutDown(); // 4. do any other component specific clean up tasks such
// as clean any static service providers and consumer resource.
this.getLogger().fine("Component " + this.getComponentName() + " shut down");
}
/**
* create jmx object name for the extension mbean. default implementation does
* not required to have the extension mbean.
* @return ObjectName of the extension mbean
*/
protected ObjectName createExtensionMBeanName() {
return null;
}
/**
* gets the reference to the extension mbean name.
* @see javax.jbi.component.ComponentLifeCycle${symbol_pound}getExtensionMBeanName()
* @return ObjectName of the extension mbean objectname or null if component
* does not support extension mbean
*/
public final ObjectName getExtensionMBeanName() {
if ( this.mExtensionMBeanName == null ) {
this.mExtensionMBeanName = this.createExtensionMBeanName();
}
return this.mExtensionMBeanName;
}
/**
* create mbean implementation for the extension mbean as a StandardMBean. default
* implementation does not require the extension mbean
* @return the ExtensionMBean implementation as StandardMBean
*/
protected StandardMBean createExtensionMBean() {
return null;
}
/**
* gets the reference to the extension mbean.
* @return extension mbean implementation or null if component does not support.
*/
protected final StandardMBean getExtensionMBean() {
if ( this.mExtensionMBeanImpl == null ) {
this.mExtensionMBeanImpl = this.createExtensionMBean();
}
return this.mExtensionMBeanImpl;
}
/**
* if there is an extension mbean supported by the component, then register
* it with the mbean server.
* @throws JBIException on error registering mbean
*/
protected final void registerExtensionMBean() throws JBIException {
// creatre the extension mbean's object name
ObjectName mbeanName = this.getExtensionMBeanName();
// create the extension mbean implemenation.
StandardMBean mbeanImpl = this.getExtensionMBean();
if ( mbeanName == null || mbeanImpl == null ) {
this.getLogger().fine(this.getComponentName() +
" Does not have Extension MBean implemenation ");
return;
}
// register with mbean only if object name and implementation are non null
try {
MBeanServer mbServer = RuntimeHelper.getComponentContext().getMBeanServer();
mbServer.registerMBean(mbeanImpl, mbeanName);
} catch (Exception e) {
throw new JBIException("Failed to register Extension MBean for " +
this.getComponentName(), e);
}
}
/**
* remove the registered extension mbean from the mbean server if any.
*/
protected final void unregisterExtensionMBean() {
ObjectName mbeanName = this.getExtensionMBeanName();
if ( mbeanName == null ) {
return;
}
try {
MBeanServer mbServer = RuntimeHelper.getComponentContext().getMBeanServer();
mbServer.unregisterMBean(mbeanName);
} catch (Exception e) {
this.getLogger().log(Level.WARNING,
"Failed to unregister Extension MBean from MBeanServer for " + this.getComponentName(), e);
}
}
/**
* creates MessageExchangeReceiver implementation that handles receiving and processing
* the message exchanges from the delivery channel. Component should implement
* this method to provide the MessageReceiver.
*
* Component may return null indicating that they don't need the message receiver
* that can receive and process message exchanges from delivery channel. For example,
* components that have only service consumers which send a synchronous messages to
* providers don't need this.
*
* @throws java.lang.Exception
* @return MessageExchangeReceiver implementation. null if the component does not support it.
* @see com.sun.jbi.sample.component.common.DefaultComponentLifecycle${symbol_pound}createMessageExchangeReceiver
*/
protected MessageExchangeReceiver createMessageExchangeReceiver() {
return null;
}
/**
* returns the message exchange receiver implementation reference
* @return MessageExchangeReceiver interface
*/
protected final MessageExchangeReceiver getMessageExchangeReceiver() {
if ( this.mMsgExchReceiver == null ) {
this.mMsgExchReceiver = createMessageExchangeReceiver();
}
return this.mMsgExchReceiver;
}
/**
* creates a message receiver object as part of the component initialization.
* @throws javax.jbi.JBIException
*/
protected void initMessageExchangeReceiver() throws JBIException {
// create and initialize the MessageExchangeReceiver
MessageExchangeReceiver mxReceiver = getMessageExchangeReceiver();
if ( mxReceiver != null ) {
mxReceiver.initReceiver();
}
}
/**
* allows the component to accept the message exchange objects from the
* delivery channel and process it as part of the component startup process.
* @throws javax.jbi.JBIException
*/
protected void startMessageExchangeProcessing() throws JBIException {
// start message processing
MessageExchangeReceiver mxReceiver = getMessageExchangeReceiver();
if ( mxReceiver != null ) {
mxReceiver.startProcessing();
}
}
/**
* stops the component from accepting the message exchange objects from the
* delivery channel as part of the component stop process
* @throws javax.jbi.JBIException
*/
protected void stopMessageExchangeProcessing() throws JBIException {
// stop message processing
MessageExchangeReceiver mxReceiver = getMessageExchangeReceiver();
if ( mxReceiver != null ) {
mxReceiver.stopProcessing();
}
}
/**
* removes the message receiver as part of the component shutdown process
* @throws javax.jbi.JBIException
*/
protected void shutdownMessageExchangeReceiver() throws JBIException {
// clean up message processing.
MessageExchangeReceiver mxReceiver = getMessageExchangeReceiver();
if ( mxReceiver != null ) {
mxReceiver.shutdownReceiver();
}
}
/**
* Returns logger initialized from the component context or a default logger.
* @return Logger
*/
protected Logger getLogger() {
return RuntimeHelper.getLogger();
}
/**
* initializes the RuntimeContext during component init lifecycle phase. This
* includes setting the ComponentContext and loggers etc. extended classes must
* save the component context in the RuntimeContext in this methods implementation.
* @see com.sun.jbi.sample.component.common.DefaultComponentLifecycle${symbol_pound}initGlobalContext
*/
protected void initGlobalContext() {
RuntimeContext.getInstance().setComponentContext(this.getComponentContext());
RuntimeContext.getInstance().setLogger(this.getClass().getName(), null);
}
/** opens the delivery channel to accept or send message exchange objects
* @see com.sun.jbi.sample.component.common.DefaultComponentLifecycle${symbol_pound}openDeliveryChannel
*/
protected void openDeliveryChannel() {
try {
DeliveryChannel channel = this.getComponentContext().getDeliveryChannel();
RuntimeContext.getInstance().setDeliveryChannel(channel);
} catch (MessagingException ex) {
ex.printStackTrace();
}
}
/** closes the delivery channel as part of the component shutdown process.
* @see com.sun.jbi.sample.component.common.DefaultComponentLifecycle${symbol_pound}closeDeliveryChannel
*/
protected void closeDeliveryChannel() {
// closes delivery channel and remove the reference.
try {
DeliveryChannel channel = RuntimeHelper.getDeliveryChannel();
if ( channel != null ) {
channel.close();
}
} catch (MessagingException ex) {
ex.printStackTrace();
} finally {
RuntimeContext.getInstance().setDeliveryChannel(null);
}
}
/**
* chance to extended classes to do any extra component specific init tasks. If the component
* supports static service providers or consumers without deployment support, they can be
* initialized here in the class extended from this class in implementing such a component.
* This method is invoked in the implementation of ComponentLifeCycle${symbol_pound}init method by this class.
* @throws javax.jbi.JBIException
* @see com.sun.jbi.sample.component.common.AbstractComponentLifecycle${symbol_pound}init
*/
protected void doInit() throws JBIException {
//NOOP
}
/**
* chance to extended classes to do any extra component specific start tasks. If the component
* supports static service providers or consumers without deployment support, they can be
* activated here in the class extended from this class in implementing such a component.
* This method is invoked in the implementation of ComponentLifeCycle${symbol_pound}start method by this class.
* @throws javax.jbi.JBIException
* @see com.sun.jbi.sample.component.common.AbstractComponentLifecycle${symbol_pound}start
*/
protected void doStart() throws JBIException {
//NOOP
}
/**
* chance to extended classes to do any extra component specific stop tasks. If the component
* supports static service providers or consumers without deployment support, they can be
* deactivated here in the class extended from this class in implementing such a component.
* This method is invoked in the implementation of ComponentLifeCycle${symbol_pound}stop method by this class.
* @throws javax.jbi.JBIException
* @see com.sun.jbi.sample.component.common.AbstractComponentLifecycle${symbol_pound}stop
*/
protected void doStop() throws JBIException {
//NOOP
}
/**
* chance to extended classes to do any extra component specific shutdown tasks.If the component
* supports static service providers or consumers without deployment support, they can be
* cleaned up here in the class extended from this class in implementing such a component.
* This method is invoked in the implementation of ComponentLifeCycle${symbol_pound}shutdown method by this class.
* @throws javax.jbi.JBIException
* @see com.sun.jbi.sample.component.common.AbstractComponentLifecycle${symbol_pound}shutdown
*/
protected void doShutDown() throws JBIException {
//NOOP
}
}

View File

@ -0,0 +1,275 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* ComponentInstaller.java
*/
package net.openesb.component.${componentName}.common;
import java.util.List;
import java.util.logging.Level;
import javax.jbi.component.Bootstrap;
import javax.jbi.component.InstallationContext;
import java.util.logging.Logger;
import javax.jbi.JBIException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.StandardMBean;
/**
* This class implements the javax.jbi.component.Bootstrap. This class implements
* the minimum required functionality for component installation contract
* of the jbi component in the jbi environment. It also takes care of maintaining
* the installation context reference and installation specific logger creation and
* installation extension mbean registration and unregistration during initialization
* and cleanup. Extended classes only need to supply the mbean name and its implementation
* object for the installation extensions.
*
* It makes sure that the installation context and the loggers are available to
* the classes extended from this class to add more installation specific functionality.
*
* Service engine or a binding component installation implementation can directly use
* this class or extend this class to add more functionality to their installation
* process.
*
* @see javax.jbi.Bootstrap
* @author chikkala
*/
public class ComponentInstaller implements Bootstrap {
/** default logger*/
private Logger mDefLogger;
/** bootstrap logger */
private Logger mBTLogger ;
/** Installation Context . */
private InstallationContext mInstallationContext;
/** Extension Mbean Name*/
private ObjectName mExtensionMBeanName;
/** Extension Mbean Implementation*/
private StandardMBean mExtensionMBeanImpl;
/** Constructor to create the ComponentInstaller. */
public ComponentInstaller() {
}
/**
* @return InstallationContext of the component.
*/
public final InstallationContext getInstallationContext() {
return this.mInstallationContext;
}
protected String getComponentName() {
return (this.mInstallationContext != null) ?
this.mInstallationContext.getComponentName() : null;
}
/**
* @return logger initialized from the installation context or a default
* logger.
*/
protected Logger getLogger() {
// try init bootstrap logger
if (this.mBTLogger == null && this.mInstallationContext != null ) {
try {
this.mBTLogger =
this.mInstallationContext.getContext().getLogger(this.getClass().getName(), null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// init default logger if required
if ( this.mBTLogger == null && this.mDefLogger == null) {
this.mDefLogger = Logger.getLogger(this.getClass().getName(), null);
}
return (this.mBTLogger != null) ? this.mBTLogger : this.mDefLogger;
}
/**
* Initializes the installation environment for a component.
* @see javax.jbi.component.Bootstrap${symbol_pound}init(javax.jbi.component.InstallationContext)
*/
public final void init(InstallationContext installContext) throws javax.jbi.JBIException {
if ( installContext == null ) {
throw new JBIException("Null Installation Context received in " +
"Component Bootstrap initialization");
}
// save the installation context reference passed by the jbi framework.
this.mInstallationContext = installContext;
registerExtensionMBean(); // create and register extension mbean
doInit(); // do any other extra initialization required specific to the component installation.
// initialize logger
this.getLogger().fine(this.mInstallationContext.getComponentName() +
" : Component Installer initialized");
}
/**
* default implementation just logs the method call. extended classes should override this.
* @see javax.jbi.component.Bootstrap${symbol_pound}onInstall()
*/
public void onInstall() throws javax.jbi.JBIException {
//TODO: do required initializaton and resource creation
this.getLogger().fine(this.mInstallationContext.getComponentName() +
" : Component installed.");
}
/**
* default implementation just logs the method call.
* @see javax.jbi.component.Bootstrap${symbol_pound}onUninstall()
*/
public void onUninstall() throws javax.jbi.JBIException {
//TODO: do clean up the resource and other stuff.
this.getLogger().fine(this.mInstallationContext.getComponentName() +
" : Component uninstalled");
}
/**
* default noop implementation of the cleanup.
* @see javax.jbi.component.Bootstrap${symbol_pound}cleanUp()
*/
public final void cleanUp() throws javax.jbi.JBIException {
unregisterExtensionMBean(); // unregister extension mbean and remove it
doCleanUp(); // do any other extra cleanup specific to the component installation.
this.getLogger().fine( this.mInstallationContext.getComponentName() +
" Component Installer Cleaned up");
}
/**
* create jmx object name for the extension mbean. Extended classes should
* return the component specific installer extension mbean name here.
*/
protected ObjectName createExtensionMBeanName() {
return null;
}
/**
* default implementation that does not have extension mbean return null.
* @see javax.jbi.component.Bootstrap${symbol_pound}getExtensionMBeanName()
*/
public final javax.management.ObjectName getExtensionMBeanName() {
if ( this.mExtensionMBeanName == null ) {
this.mExtensionMBeanName = createExtensionMBeanName();
}
return this.mExtensionMBeanName;
}
/**
* create mbean implementation for the extension mbean as a StandardMBean. Extended
* classes should return the installer extension mbean implementation as the
* standard mbean.
*/
protected StandardMBean createExtensionMBean() {
return null;
}
/**
* returns the installation extension mbean implementation.
* @return StandardMBean for the extension mbean implementation.
*/
protected final StandardMBean getExtensionMBean() {
if ( this.mExtensionMBeanImpl == null ) {
this.mExtensionMBeanImpl = this.createExtensionMBean();
}
return this.mExtensionMBeanImpl;
}
/**
* Chance to extended classes to do the component installation specific init.
* Installation context will be initialized before calling this method. So,
* initialize other things if required in this method.
* @throws javax.jbi.JBIException on error
* @see com.sun.jbi.sample.component.common.ComponentInstaller${symbol_pound}init(
* javax.jbi.component.InstallationContext)
*/
protected void doInit() throws JBIException {
this.getLogger().info(this.getInstallationContext().getComponentName() +
" : Component Installer initialized");
}
/**
* Chance to extended classes to do the component installation specific cleanup.
* ExtensionMbean will be unregistered before calling this method.
* @throws javax.jbi.JBIException on error
* @see com.sun.jbi.sample.component.common.ComponentInstaller${symbol_pound}cleanUp(
* javax.jbi.component.InstallationContext)
*/
protected void doCleanUp() throws JBIException {
this.getLogger().fine(this.getInstallationContext().getComponentName() +
" : Component Installer doCleanUp");
}
/**
* if there is an extension mbean supported by the component, then register
* it with the mbean server.
*/
protected void registerExtensionMBean() throws JBIException {
// creatre the installation extension mbean's object name
ObjectName mbeanName = this.getExtensionMBeanName();
// create the extension mbean implemenation if the object name is created.
StandardMBean mbeanImpl = this.getExtensionMBean();
if ( mbeanName == null || mbeanImpl == null ) {
this.getLogger().fine(this.getComponentName() +
" Does not have Installation Extension MBean implemenation ");
return;
}
// register with mbean only if object name and implementation are non null
try {
MBeanServer mbServer = this.getInstallationContext().getContext().getMBeanServer();
mbServer.registerMBean(mbeanImpl, mbeanName);
} catch (Exception e) {
throw new JBIException("Failed to register Installation Extension MBean for "
+ this.getComponentName(), e);
}
}
/**
* remove the registered extension mbean from the mbean server.
*/
protected void unregisterExtensionMBean() {
ObjectName mbeanName = this.getExtensionMBeanName();
if ( mbeanName == null ) {
return;
}
try {
MBeanServer mbServer = this.getInstallationContext().getContext().getMBeanServer();
mbServer.unregisterMBean(mbeanName);
} catch (Exception e) {
this.getLogger().log(Level.WARNING,
"Failed to unregister Installation extension MBean for " + this.getComponentName(), e);
}
}
/**
* This method is called by the JBI runtime to allow a component to upgrade
* it's workspace and any existing Service Units to match the new version of
* the component. The JBI runtime copies the existing workspace root to the
* new workspace root prior to calling this method, so that the component
* can examine the contents of the workspace root to determine the version
* of the component from which the upgrade is being made. All updates to the
* workspace root are done in-place; in the event of a failure, the JBI
* runtime reverts back to the original workspace root, the original install
* root, and the original Service Unit roots for the component.
*
* Note1: The component must ensure that it never holds open references
* to any files in the workspace root or any of the Service Unit roots upon
* returning from this method. Failure to do so will cause problems when
* the runtime attempts to complete the upgrade processing.
*
* Note2: The installation context that is normally initialized
* by the runtime by calling ${symbol_pound}init method of the javax.jbi.Bootstrap interface
* before install and uninstall will not be called before calling this
* upgrade method. So, installation context can not be used in this method's
* implementation.
*
* Note3: Since there won't be any installation context available, the logger
* that returned from the ${symbol_pound}getLogger method is a default logger created using
* the package name of this class or extended class if the method is overridden
* in the extended class.
*
* @param workspaceRoot the workspace root for the new version of the
* component that will replace the currently installed version. This is
* populated with the contents of the original workspace root and the
* component must update it to match the new version of the component.
* @param serviceUnitRoots a list of directory paths to all of the Service
* Units currently deployed to the component. The component must update all
* of these to match the new version of the component.
* @exception JBIException when there is an error requiring that the upgrade
* be terminated.
*/
public void upgrade(String workspaceRoot, List<String> serviceUnitRoots)
throws javax.jbi.JBIException
{
//TODO: override this method in the extended class to handle the
// workspace root and service unit roots upgrade according to the
// component's requirement.
this.getLogger().fine("Default upgrade implementation. " +
"TODO: Implement workspace root and service unit roots upgrade.");
}
}

View File

@ -0,0 +1,174 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* ComponentRuntime.java
*/
package net.openesb.component.${componentName}.common;
import java.util.logging.Logger;
import javax.jbi.component.Component;
import javax.jbi.component.ComponentContext;
import javax.jbi.component.ComponentLifeCycle;
import javax.jbi.component.ServiceUnitManager;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.servicedesc.ServiceEndpoint;
import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;
/**
* This class implements javax.jbi.component.Component interface which is
* responsible for creating the Component Lifecycle implementation and the
* ServiceUnitManager implementation for the jbi component.
*
* This class makes sure that non null component lifecycle implementation is
* returns by this class or any classes extended from this class which is
* required as a component contract. It also provides default implementation of
* all methods of the Component interface which the extended classes can
* override to add more functionality.
*
* @see javax.jbi.component.Component
* @author chikkala
*/
public class ComponentRuntime implements Component {
/** Component LifeCycle implementation */
private ComponentLifeCycle mLifeCycle;
/** ServiceUnitManager implementation */
private ServiceUnitManager mSUManager;
/** default logger*/
private Logger mDefLogger;
/** Creates a new instance of ComponentImpl */
public ComponentRuntime() {
this.mLifeCycle = null;
this.mSUManager = null;
}
/**
* returns the ComponentContext. Any component runtime class extended from
* this class can override this method to return their own reference to the
* ComponentContext.
* @return ComponentContext component context.
*/
public ComponentContext getComponentContext() {
ComponentContext ctx = null;
if ( this.mLifeCycle != null && this.mLifeCycle instanceof BasicComponentLifeCycle ) {
ctx = ((BasicComponentLifeCycle) this.mLifeCycle).getComponentContext();
}
return ctx;
}
/**
* Returns logger initialized from the component context or a default logger.
* @return Logger
*/
public Logger getLogger() {
Logger logger = null;
if ( this.mLifeCycle != null && this.mLifeCycle instanceof BasicComponentLifeCycle ) {
logger = ((BasicComponentLifeCycle) this.mLifeCycle).getLogger();
}
// init default logger if required
if ( logger == null && this.mDefLogger == null) {
this.mDefLogger = Logger.getLogger(this.getClass().getName(), null);
}
return (logger != null) ? logger : this.mDefLogger;
}
/**
* return the ComponentLifeCycle implementation. if returned null, the
* ComponentLifeCycleImpl will be used as the component lifecycle
* Extended classes can override this method and do their own ComponentLifecyle
* specific creation.
*/
protected ComponentLifeCycle createComponentLifeCycle() {
return new BasicComponentLifeCycle(this);
}
/**
* Get the life cycle control interface for this component.
*
* @return the life cycle control interface for this component
* @see javax.jbi.Component${symbol_pound}getLifeCycle()
*/
public final ComponentLifeCycle getLifeCycle() {
if ( this.mLifeCycle == null ) {
this.mLifeCycle = createComponentLifeCycle();
if ( this.mLifeCycle == null ) {
this.getLogger().fine("Creating basic component lifecycle implemenation");
// use the default ComponentLifeCycle Impl if a component
// specific implementation return null in createComponentLifeCycle.
this.mLifeCycle = new BasicComponentLifeCycle(this);
}
}
return this.mLifeCycle;
}
/**
* if this component supports service unit deployment, then return the
* service unit manager, else return null.
* Extended classes can override this method and do their own ServiceUnitManager
* specific creation.
*/
protected ServiceUnitManager createServiceUnitManager() {
return null;
}
/**
* Get the Service Unit manager for this component.
*
* @return the <code>ServiceUnitManager</code> for this component, or
* <code>null</code> if there is none.
* @see javax.jbi.Component${symbol_pound}getServiceUnitManager()
*/
public final ServiceUnitManager getServiceUnitManager() {
if ( this.mSUManager == null ) {
this.mSUManager = createServiceUnitManager();
}
return this.mSUManager;
}
/**
* Retrieves a DOM representation containing metadata which describes the
* service provided by this component, through the given endpoint.
*
* Default implementation does not support service description.
*
* @see javax.jbi.Component${symbol_pound}getServiceDescription(javax.jbi.servicedesc.ServiceEndpoint)
*/
public Document getServiceDescription(ServiceEndpoint serviceEndpoint) {
return null;
}
/**
* This method is called by JBI to check if this component, in the role of
* provider of the service indicated by the given exchange, can actually
* perform the operation desired.
*
* Default implementation has no policy and allows all exchanges with consumer.
*
* @see javax.jbi.Component${symbol_pound}isExchangeWithProviderOkay(
* javax.jbi.servicedesc.ServiceEndpoint, javax.jbi.messaging.MessageExchange)
*/
public boolean isExchangeWithConsumerOkay(
ServiceEndpoint serviceEndpoint, MessageExchange messageExchange) {
return true;
}
/**
* This method is called by JBI to check if this component, in the role of
* consumer of the service indicated by the given exchange, can actually
* interact with the provider properly. The provider is described by the
* given endpoint and the service description supplied by that endpoint.
*
* Default implementation has no policy and allows all exchanges with provider.
*
* @see javax.jbi.Component${symbol_pound}isExchangeWithProviderOkay(
* javax.jbi.servicedesc.ServiceEndpoint, javax.jbi.messaging.MessageExchange)
*/
public boolean isExchangeWithProviderOkay(
ServiceEndpoint serviceEndpoint, MessageExchange messageExchange) {
return true;
}
/**
* Resolve the given endpoint reference.
*
* Default implementation does not have any XML dialect. So can not resolve the
* endpoint from the document fragment.
*
* @see javax.jbi.Component${symbol_pound}resolveEndpointReference(org.w3c.dom.DocumentFragment)
*/
public ServiceEndpoint resolveEndpointReference(DocumentFragment documentFragment) {
return null;
}
}

View File

@ -0,0 +1,180 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* DefaultMessageExchangeReceiver.java
*
*/
package net.openesb.component.${componentName}.common;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import javax.jbi.JBIException;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
/**
* This class implements MessageExchangeReceiver interface. This is a default implementation that
* demonstrates the multi-threaded environment to receive and process message exchanges from the
* delivery channel. It uses a main thread to receive message exchanges from the delivery channel
* and then processes the received message exchanges in a individual threads from the thread pool.
* The controller methods of MessageExchangeReceiver controls the main thread and the thread pool
* execution.
*
* @author chikkala
*/
public class DefaultMessageExchangeReceiver implements MessageExchangeReceiver {
/** delivery channel accept time out */
private final static long DC_ACCEPT_TIME_OUT = 3000; // milliseconds
/** receiver thread wait time before polling for messages after woke up **/
private final static long RECEIVER_WAIT_TIME = 2000; // milliseconds
/** receiver thread wait time before force shutdown */
private final static long RECEIVER_SHUTDOWN_WAIT_TIME = 10; // seconds
/** handler threads wait time before forced shutdown */
private final static long HANDLERS_SHUTDOWN_WAIT_TIME = 30; // seconds
/** handler thread pool size */
private final static int HANDLER_THREAD_POOL_SIZE = 5;
/** receiver thread accept message exchange condition */
private Boolean mCanAccept = false;
/** receiver thread termination condition */
private Boolean mContinue = true;
/** receiver thread executor service */
private ExecutorService mReceiverThreadMgr;
/** handler thread executor service */
private ExecutorService mHandlerThreadPool;
/** no default constructor for extended classes */
public DefaultMessageExchangeReceiver() {
}
/**
* this method is called from the ComponentLifecyle.init method of the AbstractComponentLifecycle
* to initialize the message exchange receiving resources such as threads and thread pools
* throws JBIException on error
*/
public final void initReceiver() throws JBIException {
this.mHandlerThreadPool = Executors.newFixedThreadPool(HANDLER_THREAD_POOL_SIZE);
this.mReceiverThreadMgr = Executors.newSingleThreadExecutor();
this.mReceiverThreadMgr.execute(new Runnable() {
public void run() {
Thread t = Thread.currentThread();
while ( mContinue ) {
if (mCanAccept) {
receiveAndProcessMessageExchange();
} else {
try {
t.sleep(RECEIVER_WAIT_TIME);
} catch (InterruptedException interruptException) {
// someone must have interrupted this thread
// do nothing
RuntimeHelper.logDebug("Interrupted the MessageReceiverThread in Sleep");
}
}
}
}
});
}
/**
* this method is called from the ComponentLifecyle.shutdown method of the AbstractComponentLifecycle
* to cleanup the message exchange receiving resources such as threads and thread pools.
* throws JBIException on error
*/
public final void shutdownReceiver() throws JBIException {
synchronized ( mContinue ) {
mContinue = false;
}
boolean terminated = false;
try {
this.mReceiverThreadMgr.shutdown();
terminated = this.mReceiverThreadMgr.awaitTermination(
RECEIVER_SHUTDOWN_WAIT_TIME, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
RuntimeHelper.logDebug(ex);
} finally {
if ( !terminated ) {
RuntimeHelper.logDebug("Message Receiver not shutdown. Forcing shutdown");
this.mReceiverThreadMgr.shutdownNow();
}
}
shutdownHandlers();
}
/**
* shutdown all the working threads from the thread pool.
*/
private final void shutdownHandlers() throws JBIException {
boolean terminated = false;
try {
this.mHandlerThreadPool.shutdown();
terminated = this.mHandlerThreadPool.awaitTermination(
HANDLERS_SHUTDOWN_WAIT_TIME, TimeUnit.SECONDS);
} catch (InterruptedException ex) {
RuntimeHelper.logDebug(ex);
} finally {
if ( !terminated ) {
RuntimeHelper.logDebug("Handler threads not shutdown. Forcing shutdown");
this.mHandlerThreadPool.shutdownNow();
}
}
}
/**
* this method is called from the ComponentLifecyle.start method of the AbstractComponentLifecycle
* to start receiving the message exchanges from the delivery channel and process them.
* throws JBIException on error
*/
public final void startProcessing() throws JBIException {
synchronized ( this.mCanAccept ) {
this.mCanAccept = true;
}
}
/**
* this method is called from the ComponentLifecyle.stop method of the AbstractComponentLifecycle
* to stop receiving the message exchanges from the delivery channel.
* throws JBIException on error
*/
public final void stopProcessing() throws JBIException {
synchronized ( this.mCanAccept ) {
this.mCanAccept = false;
}
}
protected MessageExchangeSupport getMessageExchangeSupport() {
return RuntimeHelper.getMessageExchangeSupport();
}
private void receiveAndProcessMessageExchange() {
try {
DeliveryChannel channel = RuntimeHelper.getDeliveryChannel();
if ( channel == null ) {
RuntimeHelper.logDebug("DeliveryChannel Not Opened for receiving messages");
return;
}
final MessageExchange msgExchange = channel.accept(DC_ACCEPT_TIME_OUT);
if ( msgExchange == null ) {
// delivery channel timeout occurred. do nothing.
// RuntimeHelper.logDebug("DeliveryChannel returned null message exchange from accept");
return;
}
final ExchangeStatus status = msgExchange.getStatus();
// process message exchange in a separate thread
this.mHandlerThreadPool.execute(new Runnable() {
public void run() {
getMessageExchangeSupport().fireMessageExchangeReceived(status, msgExchange);
}
});
} catch (MessagingException ex) {
RuntimeHelper.logWarning(ex);
ex.printStackTrace();
}
}
}

View File

@ -0,0 +1,31 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* MessageExchangeHandler.java
*
*/
package net.openesb.component.${componentName}.common;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
/**
* This interface is a Handler to perform message exchanges when the component
* receives the MessageExchange object from the delivery channel.
* Implementation of this interface should implement the processing of
* the active, error, done status of the MessageExchange object according to
* the MEP for which the MessageExchange object is created.
*
* @author chikkala
*/
public interface MessageExchangeHandler {
/**
* this method will be invoked to process the MessageExchange
* object.
* @param msgExchange MessageExchange object to process.
*/
void processMessageExchange(ExchangeStatus status, MessageExchange msgExchange);
}

View File

@ -0,0 +1,36 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* MessageExchangeListener.java
*/
package net.openesb.component.${componentName}.common;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
/**
* This interface defines the notification mechanism with which the message exchange object received
* from the delivery channel is processed by the interesting parties. A particular service endpoint
* implementation would first register the implementation of this interface with MessageExchangeSupport
* to get the notification of a received message exchange on a particular service endpoint and the
* implementation of the interface would process the message exchange when notified.
*
* When the com.sun.jbi.sample.component.common.DefaultMessageExchangeReceiver receives the message exchange
* object, it asks the MessageExchangeSupport to notify the MessageExchangeLister that is registered for the
* received message exchange object to process the message exchange object.
* @see com.sun.jbi.sample.component.common.MessageExchangeSupport
* @see com.sun.jbi.sample.component.common.DefaultMessageExchangeReceiver
* @see com.sun.jbi.sample.component.common.deployment.ProviderEndpoint
* @see com.sun.jbi.sample.component.common.deployment.ProviderEndpoint
* @author chikkala
*/
public interface MessageExchangeListener {
/**
* MessageExchangeSupport will call this method to notify the lister implementation that a
* message exchange is received from the delivery channel.
* @param me MessageExchange Object
*/
void messageExchangeReceived(ExchangeStatus status, MessageExchange me);
}

View File

@ -0,0 +1,47 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* MessageExchangeReceiver.java
*
*/
package net.openesb.component.${componentName}.common;
import javax.jbi.JBIException;
/**
* This interface provides the methods can controls the receiving and processing of the message
* exchange objects from the delivery channel during the component lifecycle operations.
* The implementation of this interface can use multi-threaded environment to receive and process
* message exchanges from the delivery channel during the component lifecycle.
* @see com.sun.jbi.sample.component.common.DefaultMessageExchangeReceiver
* @author chikkala
*/
public interface MessageExchangeReceiver {
/**
* this method is called from the ComponentLifecyle.init method of the AbstractComponentLifecycle
* to initialize the message exchange receiving resources such as threads and thread pools
* throws JBIException on error
*/
void initReceiver() throws JBIException;
/**
* this method is called from the ComponentLifecyle.start method of the AbstractComponentLifecycle
* to start receiving the message exchanges from the delivery channel and process them.
* throws JBIException on error
*/
void startProcessing() throws JBIException;
/**
* this method is called from the ComponentLifecyle.stop method of the AbstractComponentLifecycle
* to stop receiving the message exchanges from the delivery channel.
* throws JBIException on error
*/
void stopProcessing() throws JBIException;
/**
* this method is called from the ComponentLifecyle.shutdown method of the AbstractComponentLifecycle
* to cleanup the message exchange receiving resources such as threads and thread pools.
* throws JBIException on error
*/
void shutdownReceiver() throws JBIException;
}

View File

@ -0,0 +1,170 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* MessageExchangeSupport.java
*
*/
package net.openesb.component.${componentName}.common;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessageExchange.Role;
import javax.xml.namespace.QName;
/**
* This class supports the registering and unregistering MessageExchangeListeners and the
* MessageExchangeHandlers that can be used to process the received message exchange from a
* delivery channel. A global reference to this class will be created in RuntimeContext object to
* provide access to this class from any where in the component runtime.
*
* A ProviderEndpoint or ConsumerEndpoint interested in a MessageExchange received from a delivery
* channel for a particular service endpoint will register the MessageExchangeListener with this
* class. The DefaultMessageExchangeReceiver when received a message exchange object from the delivery
* channel uses MessageExchangeSupport.processMessageExchange method to notify the registered listener.
*
* The MessageExchangeListener implementation ( ProviderEndpoint or ConsumerEndpoint ) while processing
* received message ( messageExchangeReceived()) will create and register the message exchange handlers
* to process the message exchange.
*
* @see RuntimeContext${symbol_pound}getMessageExchangeSupport
* @see RuntimeHelper${symbol_pound}getMessageExchangeSupport
* @see DefaultMessageExchangeReceiver${symbol_pound}receiveAndProcessMessageExchange
* @see com.sun.jbi.sample.component.common.deployment.ProviderEndpoint
* @author chikkala
*/
public class MessageExchangeSupport {
/** listener map to notify a message exchange received event */
private Map<String, MessageExchangeListener> mListeners;
/** handlers that can process the message exchange */
private Map<String, MessageExchangeHandler> mHandlers;
/** Creates a new instance of MessageExchangeSupport */
public MessageExchangeSupport() {
this.mListeners = Collections.synchronizedMap(new HashMap<String, MessageExchangeListener>());
this.mHandlers = Collections.synchronizedMap(new HashMap<String, MessageExchangeHandler>());
}
/**
* generates key that will be used to store the MessageExchangeListener objects.
* @param serviceName QName of the service
* @param endpointName endpoint name of the service.
*/
public String createListenerKey(Role role, QName interfaceName, QName serviceName, String endpointName) {
StringBuffer strBuff = new StringBuffer();
strBuff.append(interfaceName).append("+");
strBuff.append(serviceName).append("+");
strBuff.append(endpointName).append("+");
String roleType = null;
if ( Role.CONSUMER.equals(role) ) {
roleType = "CONSUMER";
} else if ( Role.PROVIDER.equals(role) ) {
roleType = "PROVIDER";
}
strBuff.append(roleType);
return strBuff.toString();
}
/**
* adds message exchange listener who are interested in receiving the notification when the
* message exchange is received from delivery channel. The listener can be registered with the
* following combination of the parameters: (role,interfaceName,serviceName, endpointName),
* (role,interfaceName,null, null), (role, null,serviceName, endpointName), (role, null,serviceName, null)
*
* @param role role of the message exchange listener PROVIDER or CONSUMER - can not be null.
* @param interfaceName QName of the interface ( protType ) - can be null if the serviceName is not null
* @param serviceName QName of the service - can be null if interfaceName is not null.
* @param endpointName endpoint name of the service. - can be null if the serviceName is not null.
* @param listener MessageExchangeListener object
*/
public synchronized void addMessageExchangeListener(Role role, QName interfaceName, QName serviceName, String endpointName, MessageExchangeListener listener) {
String key = createListenerKey(role, interfaceName, serviceName, endpointName);
this.mListeners.put(key, listener);
}
/**
* removes any message exchange listener registered for the service endpoint specified by the serviceName and
* endpoint name.
* @param serviceName QName of the service
* @param endpointName endpoint name of the service.
*/
public synchronized void removeMessageExchangeListener(Role role, QName interfaceName, QName serviceName, String endpointName) {
String key = createListenerKey(role, interfaceName, serviceName, endpointName);
MessageExchangeListener listener = this.mListeners.remove(key);
if ( listener == null ) {
RuntimeHelper.getLogger().fine("No message exchange listener removed with key " + key);
}
}
/**
* finds the MessageExchangeListner registers for the endpoint for which the message exchange is
* received and call the method on the listener
*/
public boolean fireMessageExchangeReceived(ExchangeStatus status, MessageExchange me) {
boolean notified = false;
Role role = me.getRole();
QName interfaceName = me.getInterfaceName();
QName serviceName = me.getEndpoint().getServiceName();
String endpointName = me.getEndpoint().getEndpointName();
// lookup with complete service description ( role + interface + service + endpoint )
String key = createListenerKey(role, interfaceName, serviceName, endpointName);
RuntimeHelper.getLogger().fine("looking up for mx listener with key " + key);
MessageExchangeListener listener = this.mListeners.get(key);
if ( listener == null ) { // lookup with role+interface name
key = createListenerKey(role, interfaceName, null, null);
RuntimeHelper.getLogger().fine("looking up for mx listener with key " + key);
listener = this.mListeners.get(key);
}
if ( listener == null ) { // lookup with role + serviceName + endpointName
key = createListenerKey(role, null, serviceName, endpointName);
RuntimeHelper.getLogger().fine("looking up for mx listener with key " + key);
listener = this.mListeners.get(key);
}
if ( listener == null ) { // lookup with with role + serviceName
key = createListenerKey(role, null, serviceName, null);
RuntimeHelper.getLogger().fine("looking up for mx listener with key " + key);
listener = this.mListeners.get(key);
}
if ( listener == null ) {
RuntimeHelper.getLogger().fine("Could not find listener for message exchange" + me);
notified = false;
} else {
listener.messageExchangeReceived(status,me);
notified = true;
}
return notified;
}
/**
* registers the MessageExchangeHandler implementation against the message exchange id.
* @param me MessageExchange for which the handler need to be assigned
* @param handler MessageExchangeHandler implementation that will be registers.
*/
public synchronized void addMessageExchangeHandler(MessageExchange me, MessageExchangeHandler handler) {
this.mHandlers.put(me.getExchangeId(), handler);
}
/**
* removes the MessageExchangeHandler for the particular message exchange object
*/
public synchronized void removeMessageExchangeHandler(MessageExchange me) {
MessageExchangeHandler handler = this.mHandlers.remove(me.getExchangeId());
if ( handler == null ) {
RuntimeHelper.getLogger().fine("No MessageExchangeHandler found for removing " + me.getExchangeId());
}
}
/**
* looks up the registered message exchange handler for the message exchange object
* @param me MessageExchangeHandler.
*/
public synchronized MessageExchangeHandler findMessageExchangeHandler(MessageExchange me) {
return this.mHandlers.get(me.getExchangeId());
}
/**
* looks up the registered message exchange handler for the message exchange object with Id
* @param exchangeId message exchange object's id
*/
public synchronized MessageExchangeHandler findMessageExchangeHandler(String exchangeId) {
return this.mHandlers.get(exchangeId);
}
}

View File

@ -0,0 +1,176 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* RuntimeContext.java
*
*/
package net.openesb.component.${componentName}.common;
import java.util.logging.Logger;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
/**
* This class is global context for all the component runtime to store and
* retrieve the information that should be available anywhere in the component runtime.
*
* Each instance variable of this class will be initialized at various points of the
* component runtime using setter methods on this class.
*
* The two important objects that will be initialized and available from this context are
* ComponentContext and the opened DeliveryChannel objects both of which will be set from the
* implementation {@link BasicComponentLifeCycle}.
*
* Note that the ComponentContext from this global context will not be available until
* the jbi framework calls the init method of the ComponentLifeCycle of the component and
* then intern the implementation of the init method sets the context.
*
* @see BasicComponentLifeCycle${symbol_pound}initGlobalContext
* @see BasicComponentLifeCycle${symbol_pound}openDeliveryChannel
* @see BasicComponentLifeCycle${symbol_pound}closeDeliveryChannel
* @author chikkala
*/
public final class RuntimeContext {
/** RuntimeContext singleton instance */
private static RuntimeContext sRuntimeContext;
/** default logger*/
private Logger mDefLogger;
/** Logger object. */
private Logger mLogger;
/** Holds value of property ComponentContext. */
private ComponentContext mComponentContext;
/** Holds value of property DeliveryChannel. */
private DeliveryChannel mDeliveryChannel;
/** MessageExchange processing support **/
private MessageExchangeSupport mMESupport;
/** outside code can not instantiate RuntimeContext */
private RuntimeContext() {
}
/**
* @return RuntimeContext instance.
*/
public static RuntimeContext getInstance() {
if ( sRuntimeContext == null ) {
synchronized (RuntimeContext.class) {
if ( sRuntimeContext == null ) {
sRuntimeContext = new RuntimeContext();
}
}
}
return sRuntimeContext;
}
/**
* Getter for to obtaining ComponentContext from any where in the component runtime.
* @return ComponentContext.
*/
public ComponentContext getComponentContext() {
return this.mComponentContext;
}
/**
* Sets the Component context reference in Runtime context for global access
* any class in the component runtime.
* com.sun.jbi.sample.component.common.AbstractComponentLifeCycle${symbol_pound}initContext
* method implementation should call this method to set the global context.
* see com.sun.jbi.sample.component.common.DefaultComponentLifeCycle${symbol_pound}initContext
* for details.
* @param componentContext New value of property ComponentContext.
* @see BasicComponentLifeCycle${symbol_pound}initGlobalContext
*/
public void setComponentContext(ComponentContext componentContext) {
if ( this.mComponentContext != null ) {
(new IllegalStateException("Component Context already " +
"initialized in RuntimeContext")).printStackTrace();
}
this.mComponentContext = componentContext;
}
/**
* Getter for obtaining opened delivery channel from any where in the component runtime.
* @return DeliveryChannel.
*/
public DeliveryChannel getDeliveryChannel() {
return this.mDeliveryChannel;
}
/**
* Sets the opened delivery channel reference in Runtime context for global access
* any class in the component runtime.
* com.sun.jbi.sample.component.common.AbstractComponentLifeCycle${symbol_pound}initContext
* method implementation should call this method to set the global context.
* see com.sun.jbi.sample.component.common.DefaultComponentLifeCycle${symbol_pound}initContext
* for details.
*
* @param componentContext New value of property ComponentContext.
*/
public void setDeliveryChannel(DeliveryChannel deliveryChannel) {
if ( deliveryChannel != null && this.mDeliveryChannel != null ) {
(new IllegalStateException("Delivery Channel already " +
"initialized in RuntimeContext")).printStackTrace();
}
this.mDeliveryChannel = deliveryChannel;
}
/**
* Sets the logger.
*
* @param name name for the Logger.
* @param resourceBundle resource bundle for the logger. can be null.
*/
public void setLogger(String name, String resourceBundle) {
if (this.mComponentContext != null) {
// get the logger from component context if the component context is not null
try {
this.mLogger = this.mComponentContext.getLogger(name, resourceBundle);
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
this.mDefLogger = Logger.getLogger(name, resourceBundle);
}
}
/**
* Returns the logger.
*
* @return Logger
*/
public Logger getLogger() {
// try init logger
if (this.mLogger == null && this.mComponentContext != null ) {
try {
this.mLogger =
this.mComponentContext.getLogger(this.getClass().getName(), null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
// init default logger if required
if ( this.mLogger == null && this.mDefLogger == null) {
this.mDefLogger = Logger.getLogger(this.getClass().getName(), null);
}
return (this.mLogger != null) ? this.mLogger : this.mDefLogger;
}
/**
* Returns the Component Name if the ComponentContext is set. else null
* @return component name
*/
public String getComponentName() {
String componentName = null;
if (this.mComponentContext != null) {
componentName = this.mComponentContext.getComponentName();
}
return componentName;
}
/**
* Global MessageExchangeSupport reference. Various classes in the common
* component runtime would use this method to obtain the MessageExchangeSupport
* for processing message exchange objects received from delivery channel.
*/
public MessageExchangeSupport getMessageExchangeSupport() {
if ( this.mMESupport == null ) {
this.mMESupport = new MessageExchangeSupport();
}
return this.mMESupport;
}
}

View File

@ -0,0 +1,360 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* RuntimeHelper.java
*/
package net.openesb.component.${componentName}.common;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
/**
* This is a helper class that have bunch of methods for xml processing.
* @author chikkala
*/
public class RuntimeHelper {
public static Logger getLogger() {
return RuntimeContext.getInstance().getLogger();
}
public static void logWarning(Object logObj) {
if ( logObj instanceof Throwable) {
getLogger().log(Level.WARNING, ((Throwable)logObj).getMessage(), (Throwable)logObj);
} else {
getLogger().warning(logObj.toString());
}
}
public static void logError(Object logObj) {
if ( logObj instanceof Throwable) {
getLogger().log(Level.SEVERE, ((Throwable)logObj).getMessage(), (Throwable)logObj);
} else {
getLogger().severe(logObj.toString());
}
}
public static void logDebug(Object logObj) {
if ( logObj instanceof Throwable) {
getLogger().log(Level.FINER, ((Throwable)logObj).getMessage(), (Throwable)logObj);
} else {
getLogger().finer(logObj.toString());
}
}
public static String getComponentName() {
return RuntimeContext.getInstance().getComponentName();
}
public static ComponentContext getComponentContext() {
return RuntimeContext.getInstance().getComponentContext();
}
public static DeliveryChannel getDeliveryChannel() {
return RuntimeContext.getInstance().getDeliveryChannel();
}
public static MessageExchangeSupport getMessageExchangeSupport() {
return RuntimeContext.getInstance().getMessageExchangeSupport();
}
/**
* return the DOM Document
* @param xmlReader Reader
* @return dom document
* @throws Exception on parser exception or any other exception
*/
public static Document buildDOMDocument(Reader xmlReader) throws Exception {
InputSource xmlSource = new InputSource(xmlReader);
return buildDOMDocument(xmlSource);
}
/**
* return the DOM Document
* @param xmlReader Reader
* @return dom document
* @throws Exception on parser exception or any other exception
*/
public static Document buildDOMDocument(InputSource xmlSource) throws Exception {
Document xmlDoc = null;
DocumentBuilderFactory docBuilderFactory =
DocumentBuilderFactory.newInstance();
docBuilderFactory.setValidating(false);
docBuilderFactory.setNamespaceAware(true);
DocumentBuilder docBuilder =
docBuilderFactory.newDocumentBuilder();
docBuilder.setErrorHandler( new DefaultHandler() {
public void fatalError(SAXParseException e)
throws SAXException {
throw new SAXException(e.getMessage());
}
});
docBuilder.setEntityResolver(new EntityResolver() {
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
StringReader reader =
new StringReader("<?xml version=${symbol_escape}"1.0${symbol_escape}" encoding=${symbol_escape}"UTF-8${symbol_escape}"?>"); // NOI18N
InputSource source = new InputSource(reader);
source.setPublicId(publicId);
source.setSystemId(systemId);
return source;
}
});
xmlDoc = docBuilder.parse(xmlSource);
return xmlDoc;
}
/**
* reads xml text from DOMSource to StringBuffer
*/
public static StringBuffer readFromDOMSource(DOMSource domSource) {
StringWriter writer = new StringWriter();
TransformerFactory tFactory = TransformerFactory.newInstance();
Transformer trans = null;
try {
trans = tFactory.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION,
"yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult result = new StreamResult(writer);
trans.transform(domSource, result);
} catch (TransformerConfigurationException ex) {
ex.printStackTrace();
} catch (TransformerException ex) {
ex.printStackTrace();
}
return writer.getBuffer();
}
/**
* reads the xml text from InputSource into a StringBuffer
*/
public static StringBuffer readFromInputSource(InputSource inSource) {
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
InputStream inStream = inSource.getByteStream();
Reader reader = inSource.getCharacterStream();
if ( reader == null ) {
reader = new InputStreamReader(inStream);
}
BufferedReader buff = new BufferedReader(reader);
try {
for ( String line = null; (line = buff.readLine()) != null ; ) {
out.println(line);
}
} catch (IOException ex) {
ex.printStackTrace();
}
return writer.getBuffer();
}
/**
* reads xml from from DOM, SAX or Stream Source into a string buffer
*/
public static StringBuffer readFromSource(Source source) {
if ( source instanceof DOMSource ) {
return readFromDOMSource((DOMSource)source);
} else {
InputSource inSource = SAXSource.sourceToInputSource(source);
if ( inSource != null ) {
return readFromInputSource(inSource);
} else {
return null;
}
}
}
/**
* creates a DOMSource from the xml text read from the reader.
*/
public static DOMSource createDOMSource(Reader xmlReader) {
Document doc = null;
try {
doc = buildDOMDocument(xmlReader);
} catch (Exception ex) {
ex.printStackTrace();
}
return new DOMSource(doc);
}
/**
* creates a DOMSource from any source. If the source itself is DOMSource,
* the source is returned as it is as DOMSource.
*/
public static DOMSource sourceToDOMSource(Source source) {
if ( source instanceof DOMSource) {
return (DOMSource) source;
}
InputSource xmlSource = SAXSource.sourceToInputSource(source);
Document doc = null;
try {
doc = buildDOMDocument(xmlSource);
} catch (Exception ex) {
ex.printStackTrace();
}
return new DOMSource(doc);
}
/**
* converts the ex stracktrace to string.
*/
public static StringBuffer getExceptionStackTrace(Exception ex) {
StringWriter strWriter = new StringWriter();
if ( ex != null ) {
PrintWriter out = new PrintWriter(strWriter);
ex.printStackTrace(out);
}
return strWriter.getBuffer();
}
/**
* may be used to set the exception as fault content.
*/
public static String getExceptionAsXmlText(Exception ex) {
String message = replaceXmlEscapeCharsToEntityRefereces(ex.getMessage());
String stackTrace = replaceXmlEscapeCharsToEntityRefereces(
getExceptionStackTrace(ex).toString());
String exXmlText =
"<java-exception xmlns=${symbol_escape}"http://java.sun.com/ns/jbi/samples/java-exception/types/${symbol_escape}" >" +
"<ex-message>" + message + "</ex-message>" +
"<ex-stack-trace>" + stackTrace + "</ex-stack-trace>" +
"</java-exception>" ;
return exXmlText;
}
/**
* may be used to set the exception as fault content.
*/
public static String getExceptionAsText(Exception ex) {
String message = replaceXmlEscapeCharsToEntityRefereces(ex.getMessage());
String stackTrace = replaceXmlEscapeCharsToEntityRefereces(
getExceptionStackTrace(ex).toString());
StringBuffer buff = new StringBuffer();
buff.append(message);
buff.append(System.getProperty("line.separator", "${symbol_escape}n"));
buff.append(stackTrace);
return buff.toString();
}
/**
* For attribute values which denote a QName, i.e. include a namespace prefix,
* resolve the value into a QName.
* If a namespace can not be resolved, it is set to empty - it does not
* result in an exception
* @param attrValue the string value of the attribute
* @param element the element the attribute belongs to
*/
public static QName resolveAttrQName(String attrValue, Element element) {
int aColonLoc = attrValue.indexOf(":");
String aLocalName = attrValue;
String aPrefix = null;
String aNS = null;
if (aColonLoc > -1) {
aPrefix = attrValue.substring(0, aColonLoc);
aLocalName = attrValue.substring(aColonLoc + 1);
// Traverse up the hierarchy until a namespace definition is found
// or the top of the document is reached.
Node currNode = element;
while ((aNS == null || aNS.equals("")) && currNode != null) {
if (currNode.getNodeType() == Node.ELEMENT_NODE) {
aNS = ((Element) currNode).getAttribute("xmlns:" + aPrefix);
}
currNode = currNode.getParentNode();
}
}
QName qName = new QName(aNS, aLocalName, aPrefix);
return qName;
}
/**
* replaces the xml entity references with the xml escape chars
* @param xmlString Text with the xml escape chars
* @param Text with the xml entity references
*/
public static String replaceXmlEscapeCharsToEntityRefereces(String xmlString) {
if ( xmlString == null ) {
return xmlString;
}
// just convert < , > and & only
StringBuffer sbuff = new StringBuffer(2 * xmlString.length());
for ( int i = 0; i < xmlString.length(); ++i ) {
switch ( xmlString.charAt(i) ) {
case '&': sbuff.append("&amp;");
break;
case '<': sbuff.append("&lt;");
break;
case '>': sbuff.append("&gt;");
break;
default: sbuff.append( xmlString.charAt(i) );
}
}
return sbuff.toString();
}
/**
* return Element node from a document node or non document. Use to extract
* the message root element.
* @root node from which the Element node will be extracted.
* @return Element node.
*/
public static Element getElement(Node root) {
Element msgEl = null;
if ( root instanceof Document) {
msgEl = ((Document)root).getDocumentElement();
} else if (root instanceof Element) {
msgEl = (Element)root;
} else {
NodeList nodeList = root.getChildNodes();
for ( int i=0; i < nodeList.getLength(); ++i) {
Node node = nodeList.item(i);
if ( node instanceof Element ) {
msgEl = (Element) node;
break;
}
}
}
return msgEl;
}
public static Element getElement(DOMSource domSource) {
return getElement(domSource.getNode());
}
}

View File

@ -0,0 +1,312 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractServiceUnitManager.java
*
*/
package net.openesb.component.${componentName}.common.deployment;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jbi.component.ServiceUnitManager;
import javax.jbi.management.DeploymentException;
/**
* This is an abstract class that implements {@link javax.jbi.component.ServiceUnitManager} to provide a
* service unit deployment support for the component. The implementation supported by this service
* unit manager and related classes in this package provides WSDL1.1 based service unit deployment
* in the component.
*
* @see javax.jbi.component.ServiceUnitManager
* @see ServiceUnit
*
* @author chikkala
*/
public abstract class AbstractServiceUnitManager implements ServiceUnitManager {
/** Map of ServiceUnit Name to the ServiceUnit Object for all the service units
* deployed in the component */
private Map<String,ServiceUnit> mSUMap;
/** Creates a new instance of AbstractSUManager */
protected AbstractServiceUnitManager() {
this.mSUMap = Collections.synchronizedMap(new HashMap<String,ServiceUnit>());
}
/** returns the component name
* @return component name.
*/
protected abstract String getComponentName();
/**
* @return Logger
*/
protected abstract Logger getLogger();
/**
* returns the creation of the ServiceUnit implementation specific to the service unit deployment
* for the component.
* @param suName service unit name
* @param suRootPath service unit root path
* @param concrete implementation of the ServiceUnit class.
*/
protected abstract ServiceUnit createServiceUnit(String suName, String suRootPath)
throws DeploymentException;
/**
* returns the service unit object deployed by the specified name. or null if not deployed.
* @param suName service unit name to look for
* @param ServiceUnit object for the suName. or null if not present.
*/
private ServiceUnit getServiceUnit(String suName) {
return this.mSUMap.get(suName);
}
/**
* lookup for the deployed service unit. If not there, throws a deployment exception.
* @param suName service unit name
* @return ServiceUnit object
* @throws DeploymentException if the service unit is not present.
*/
private ServiceUnit findServiceUnit(String suName) throws DeploymentException {
ServiceUnit serviceUnit = getServiceUnit(suName);
if ( serviceUnit == null ) {
throw new DeploymentException("Service unit " + suName + " does not exist");
}
return serviceUnit;
}
/**
* add the service unit object to the list of deployed service units. if there is already a
* service unit present with the name, throws a deployment exception.
* @param su service unit to add
* @return ServiceUnit object that is added.
* @throws DeploymentException if the service unit already present.
*/
private ServiceUnit addServiceUnit(ServiceUnit su) throws DeploymentException {
String suName = su.getName();
ServiceUnit oldSU = getServiceUnit(suName);
if ( oldSU != null ) {
throw new DeploymentException("Service unit " + suName + "already exists");
}
this.mSUMap.put(suName, su);
return su;
}
/**
* removes service unit object from the list of deployed service units. if there is no
* service unit present with the name, throws a deployment exception.
* @param su service unit to add
* @return ServiceUnit object that is being removed.
* @throws DeploymentException if the service unit already present.
*/
private ServiceUnit removeServiceUnit(ServiceUnit su) throws DeploymentException {
String suName = su.getName();
ServiceUnit oldSU = getServiceUnit(suName);
if ( oldSU == null ) {
throw new DeploymentException("Service unit " + suName + " does not exist");
}
return this.mSUMap.remove(suName);
}
/**
* creates the concrete service unit implementation and calls the load method on it to initialize
* the created service unit.
* @param suName service unit name to create
* @param suRootPath service unit root path.
* @return ServiceUnit that is created and loaded.
*/
private ServiceUnit loadServiceUnit(String suName, String suRootPath) throws DeploymentException {
ServiceUnit serviceUnit = createServiceUnit(suName, suRootPath);
serviceUnit.doLoad();
return serviceUnit;
}
/**
* deploys a service unit. it creates and loads the service unit object for the suName and then call
* doDeploy on the service unit and adds it to the deployed service unit list
* @return result as jbi management xml
* @throws DeploymentException if there is an error deploying.
*/
private synchronized String deployServiceUnit(String suName, String suRootPath) throws DeploymentException {
String result = suName;
ServiceUnit oldSU = getServiceUnit(suName);
if ( oldSU != null ) {
throw new DeploymentException("Service unit " + suName + "already exists");
}
ServiceUnit serviceUnit = loadServiceUnit(suName, suRootPath);
serviceUnit.doDeploy();
addServiceUnit(serviceUnit);
return result;
}
/**
* Deploy a Service Unit to the component.
* @see javax.jbi.component.ServiceUnitManager${symbol_pound}deploy(String, String);
*/
public final String deploy(String suName, String suRootPath) throws DeploymentException {
this.getLogger().fine("Deploying service unit " + suName + " with suRootPath " + suRootPath);
String compName = this.getComponentName();
boolean isSuccess = true;
String mainMsg = "Successfully deployed service unit " + suName;
Exception errEx = null;
try {
deployServiceUnit(suName, suRootPath);
} catch (Exception ex) {
isSuccess = false;
errEx = ex;
mainMsg = "Failed to deploy service unit " + suName ;
this.getLogger().log(Level.FINE, mainMsg, ex);
}
return createComponentTaskResultXML(compName, "deployTask", isSuccess, mainMsg, errEx);
}
/**
* undeploys the service unit. it looks up the existing deployed service unit and call doUndeploy
* on it and then removes from the deployed service unit list.
*/
private synchronized String undeployServiceUnit(String suName, String suRootPath) throws DeploymentException {
String result = suName;
ServiceUnit serviceUnit = findServiceUnit(suName);
serviceUnit.doUndeploy();
removeServiceUnit(serviceUnit);
return result;
}
/**
* Undeploy a service unit from the component.
* @see javax.jbi.component.ServiceUnitManager${symbol_pound}undeploy(String, String);
*/
public final String undeploy(String suName, String suRootPath) throws DeploymentException {
this.getLogger().fine("Undeploying service unit " + suName + " with suRootPath " + suRootPath);
String compName = this.getComponentName();
boolean isSuccess = true;
String mainMsg = "Successfully undeployed service unit " + suName;
Exception errEx = null;
try {
undeployServiceUnit(suName, suRootPath);
} catch (Exception ex) {
isSuccess = false;
errEx = ex;
mainMsg = "Failed to undeploy service unit " + suName ;
this.getLogger().log(Level.FINE, mainMsg, errEx);
}
return createComponentTaskResultXML(compName, "undeployTask", isSuccess, mainMsg, errEx);
}
/**
* Initialize the given deployed service unit.
* @see javax.jbi.component.ServiceUnitManager${symbol_pound}init(String, String); */
public final void init(String suName, String suRootPath)
throws DeploymentException {
this.getLogger().fine("Initializing service unit " + suName + " with suRootPath " + suRootPath);
String result = suName;
ServiceUnit serviceUnit = getServiceUnit(suName);
if ( serviceUnit == null ) { // if the service unit not exists, create and add
serviceUnit = loadServiceUnit(suName, suRootPath); // create and load service unit
addServiceUnit(serviceUnit); // add service unit to existing service units
}
serviceUnit.doInit(); // Do Service unit initialization tasks
this.getLogger().fine("Service unit initialized:" + suName);
}
/**
* Shut down the deployment.
* @see javax.jbi.component.ServiceUnitManager${symbol_pound}shutdown(String);
*/
public final void shutDown(String suName) throws DeploymentException {
ServiceUnit serviceUnit = findServiceUnit(suName); // find service unit
serviceUnit.doShutdown(); // Do Service unit shutdown tasks
this.getLogger().fine("Service unit shut down:" + suName);
}
/**
* Start the deployed service unit.
* @see javax.jbi.component.ServiceUnitManager${symbol_pound}start(String);
*/
public final void start(String suName) throws DeploymentException {
ServiceUnit serviceUnit = findServiceUnit(suName); // find service unit
serviceUnit.doStart(); // Do service unit start tasks.
this.getLogger().fine("Service unit started:" + suName );
}
/**
* Stop the deployed service unit.
* @see javax.jbi.component.ServiceUnitManager${symbol_pound}stop(String);
*/
public final void stop(String suName) throws DeploymentException {
ServiceUnit serviceUnit = findServiceUnit(suName); // find service unit
serviceUnit.doStop(); // do service unit stop tasks
this.getLogger().fine("Service unit stopped: " + suName + " stopped.");
}
/**
* helper method to create result message as jbi management message xml.
* @param componentName name of the component for this xml.
* @param taskId task id
* @param isSuccess true to format a success result, false to format a failed result.
* @param mainMsg main result message
* @param errEx Exception, null if there is no exception in failure message.
* @return XML string.
*/
protected static String createComponentTaskResultXML(
String componentName, String taskId, boolean isSuccess, String mainMsg, Exception errEx ) {
String exMsgXml = getComponentTaskResultExceptionXML(errEx);
String mainMsgXmlEsc = RuntimeHelper.replaceXmlEscapeCharsToEntityRefereces(mainMsg);
String taskResult = isSuccess ? "SUCCESS" : "FAILED";
String msgType = isSuccess ? "INFO" : "ERROR";
String xmlResult =
"<component-task-result xmlns=${symbol_escape}"http://java.sun.com/xml/ns/jbi/management-message${symbol_escape}" >" +
" <component-name>" + componentName + "</component-name>" +
" <component-task-result-details >" +
" <task-result-details>" +
" <task-id>" + taskId + "</task-id>" +
" <task-result>" + taskResult + "</task-result>" +
" <message-type>" + msgType + "</message-type>" +
" <task-status-msg>" +
" <msg-loc-info>" +
" <loc-token>SU_MGR_MSG_ID</loc-token>" +
" <loc-message>" + mainMsgXmlEsc + "</loc-message>" +
" </msg-loc-info>" +
" </task-status-msg>" +
exMsgXml +
" </task-result-details>" +
" </component-task-result-details>" +
"</component-task-result>";
return xmlResult;
}
/**
* converts the exception to the jbi management message xml chunk.
*/
private static String getComponentTaskResultExceptionXML(Exception errEx) {
StringBuffer exMsgBuff = new StringBuffer();
if ( errEx == null ) {
return exMsgBuff.toString(); // empty string.
}
List<Throwable> exList = new ArrayList<Throwable>();
int exLevel = 0;
for ( Throwable cause = errEx ; cause != null ; cause = cause.getCause() ) {
String causeMsg = RuntimeHelper.replaceXmlEscapeCharsToEntityRefereces(
cause.getMessage());
StringWriter stBuff = new StringWriter();
PrintWriter stOut = new PrintWriter(stBuff);
StackTraceElement[] stList = cause.getStackTrace();
for (StackTraceElement stEl : stList) {
stOut.println(stEl.toString());
}
stOut.close();
String causeStackTrace = RuntimeHelper.replaceXmlEscapeCharsToEntityRefereces(
stBuff.getBuffer().toString());
exMsgBuff.append("<exception-info>");
exMsgBuff.append(" <nesting-level>" + exLevel + "</nesting-level>");
exMsgBuff.append(" <msg-loc-info>" + "<loc-token>SU_MGR_EXP_ID</loc-token>");
exMsgBuff.append(" <loc-message>" + causeMsg + "</loc-message>");
exMsgBuff.append(" </msg-loc-info>");
exMsgBuff.append(" <stack-trace>" + causeStackTrace + "</stack-trace>");
exMsgBuff.append("</exception-info>");
++exLevel;
}
return exMsgBuff.toString();
}
}

View File

@ -0,0 +1,208 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* ConsumerEndpoint.java
*/
package net.openesb.component.${componentName}.common.deployment;
import javax.jbi.JBIException;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange.Role;
import javax.jbi.messaging.MessageExchangeFactory;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.wsdl.Definition;
import javax.xml.namespace.QName;
/**
* This class extends from Endpoint class and implements lifecycle methods functionality required for the
* endpoint for a service consumer. {@link ServiceUnit${symbol_pound}createConsumerEndpoint} creates the object of this
* type to implement the service consumer functionality.
*
* @see ServiceUnit${symbol_pound}createConsumerEndpoint
* @author chikkala
*/
public class ConsumerEndpoint extends Endpoint {
/**
* This constructor initializes the endpoint with CONSUMER role and makes sure that the service
* description passed to it is of consumer description.
*/
protected ConsumerEndpoint(SUDescriptor.Consumes consumes, Definition wsdlDef, ServiceUnit su) {
super(Role.CONSUMER, consumes, wsdlDef, su);
}
/**
* constructor that does not need service unit information. useful for creating the endpoint for
* static services provided by the component.
*/
protected ConsumerEndpoint(SUDescriptor.Consumes consumes, Definition wsdlDef) {
this(consumes, wsdlDef, null);
}
public final void init() throws JBIException {
getLogger().fine("ConsumerEndpoint: init called");
doInit(); //1. initialize the endpiont resources
addMessageExchangeListener(); //2. register message exchange linster.
}
public final void activate() throws JBIException {
getLogger().fine("ConsumerEndpoint: activate called");
//1. do common ativation tasks.
doActivate(); //2. do any other activation related tasks.
}
public final void deactivate() throws JBIException {
getLogger().fine("ConsumerEndpoint: deactivate called");
//1. do common deactivation tasks.
doDeactivate(); //2. do any other deactivation related tasks.
}
public final void clean() throws JBIException {
getLogger().fine("ConsumerEndpoint: clean called");
removeMessageExchangeListener(); //1. remove message exchange listener
doClean(); //2. clean up any other resources.
}
protected void doInit() throws JBIException {
//NOOP
}
protected void doActivate() throws JBIException {
//NOOP
}
protected void doDeactivate() throws JBIException {
//NOOP
}
protected void doClean() throws JBIException {
//NOOP
}
/**
* helper method to find the active ServiceEndpiont for the service described with the
* serviceDescriptor. This method looks for the Active ServiceEndpoint using interface or
* service name or service name and the endpoint name.
*/
public ServiceEndpoint findServiceEndpoint() {
QName serviceType = this.getService().getInterface();
QName serviceName = this.getService().getServiceName();
String endpointName = this.getService().getEndpointName();
ServiceEndpoint [] refs = null;
ServiceEndpoint serviceEndpoint = null;
ComponentContext compContext = this.getComponentContext();
if ( compContext == null ) {
this.getLogger().info("Null Component context. Can not find ServiceEndpoint");
return null;
}
// lookup ServiceEndpiont with concrete service(serice qname + endpoint name).
if ( serviceName != null && endpointName != null ) {
this.getLogger().info("Looking for ServiceEndpoint with:" +
" ServiceName: " + serviceName + " EndpointName: " + endpointName);
serviceEndpoint = compContext.getEndpoint(serviceName, endpointName);
}
// else lookup ServiceEndpiont with Service Name
if ( serviceEndpoint == null && serviceName != null && endpointName == null) {
this.getLogger().info("Looking for ServiceEndpoint with Service name: " + serviceName);
refs = compContext.getEndpointsForService(serviceName);
if ( refs != null && refs.length > 0 ) {
serviceEndpoint = refs[0];
}
}
// else lookup ServiceEndpont with serviceType
if ( serviceEndpoint == null && serviceType != null &&
serviceName == null && endpointName == null) {
this.getLogger().info("Looking for ServiceEndpoint with Service type: " + serviceType);
refs = compContext.getEndpoints(serviceType);
if ( refs != null && refs.length > 0 ) {
serviceEndpoint = refs[0];
}
}
return serviceEndpoint;
}
/**
* this method creates a InOutMessageExchange Object and sets the required
* data on the MessageExchange object including the create and set the Normalized
* message object to hold the input message on the MessageExchange object.
*/
public InOut createInOutMessageExchange(QName operation)
throws MessagingException, JBIException {
ServiceEndpoint serviceEndpoint = null;
// find a ServiceEndpoint activated by the Service Providers for this service
serviceEndpoint = findServiceEndpoint();
if ( serviceEndpoint == null ) {
// if not found a activated ServiceEndpoint for this service, throw exception.
throw new JBIException("Can not find an Active ServiceEndpoint for ${symbol_escape}n" + this.getService());
} else {
this.setServiceEndpoint(serviceEndpoint);
}
InOut inOutME = null;
DeliveryChannel channel = this.getDeliveryChannel();
// create message exchange factory for the endpiont
MessageExchangeFactory factory = channel.createExchangeFactory(serviceEndpoint);
// create INOUT Message Exchange
inOutME = factory.createInOutExchange();
// set operation
inOutME.setOperation(operation);
// set interface if that is not set
if ( inOutME.getInterfaceName() == null ) {
inOutME.setInterfaceName(this.getService().getInterface());
}
// create IN Nomralized Message
NormalizedMessage inMsg = inOutME.createMessage();
// set IN Normalized message on message exchange
inOutME.setInMessage(inMsg);
return inOutME;
}
/**
* this method creates a InOnlyMessageExchange Object and sets the required
* data on the MessageExchange object including the create and set the Normalized
* message object to hold the input message on the MessageExchange object.
*/
public InOnly createInOnlyMessageExchange(QName operation)
throws MessagingException, JBIException {
ServiceEndpoint serviceEndpoint = null;
// find a ServiceEndpoint activated by the Service Providers for this service
serviceEndpoint = findServiceEndpoint();
if ( serviceEndpoint == null ) {
// if not found a activated ServiceEndpoint for this service, throw exception.
throw new JBIException("Can not find an Active ServiceEndpoint for ${symbol_escape}n" + this.getService());
} else {
this.setServiceEndpoint(serviceEndpoint);
}
InOnly inOnlyME = null;
DeliveryChannel channel = this.getDeliveryChannel();
// create message exchange factory for the endpiont
MessageExchangeFactory factory = channel.createExchangeFactory(serviceEndpoint);
// create INOUT Message Exchange
inOnlyME = factory.createInOnlyExchange();
// set operation
inOnlyME.setOperation(operation);
// set interface if that is not set
if ( inOnlyME.getInterfaceName() == null ) {
inOnlyME.setInterfaceName(this.getService().getInterface());
}
// create IN Nomralized Message
NormalizedMessage inMsg = inOnlyME.createMessage();
// set IN Normalized message on message exchange
inOnlyME.setInMessage(inMsg);
return inOnlyME;
}
}

View File

@ -0,0 +1,289 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* Endpoint.java
*
*/
package net.openesb.component.${componentName}.common.deployment;
import net.openesb.component.${componentName}.common.MessageExchangeHandler;
import net.openesb.component.${componentName}.common.MessageExchangeListener;
import net.openesb.component.${componentName}.common.MessageExchangeSupport;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.util.logging.Logger;
import javax.jbi.JBIException;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessageExchange.Role;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.Operation;
import javax.xml.namespace.QName;
/**
* This is an abstract class that represents the Endpoint defined for service provisioning or
* consumption in a jbi component. It stores the required service description ( wsdl definition,
* role, service unit to which it belongs etc) and defines the lifecycle operations {@link ${symbol_pound}init},
* {@link ${symbol_pound}activate}, {@link ${symbol_pound}deactivate}, {@link ${symbol_pound}clean} to control a service endpoint that
* provides or consumes the service.
* <p>
* Extended classes implement the abstract methods defined in this class to implement the endpoint
* functionality by providing the functionality to process the deployment artifacts specific to this
* endpoint, configure the endpoint to send/receive messages to/from delivery channel and process them
* according to the specific service implementation.
*
* @author chikkala
*/
public abstract class Endpoint {
/** Role of this endpoint. CONSUMER or PROVIDER */
private Role mRole;
/** Service description from the SU descriptor for which this endpoint is configured */
private SUDescriptor.Service mService;
/** WSDL definition corresponding to this endpoint */
private Definition mWsdlDef;
/** service endpoint corresponding to this endpoint */
private ServiceEndpoint mServiceEndpoint;
/** service unit from which this endpoint is created */
private ServiceUnit mSU; // can be null
/** private constructor to force extended classes to use the parameterized constructor */
private Endpoint() {
}
/** Creates a new instance of Endpoint
* @param role CONSUMER or PRVODER role.
* @param service service description from the su descriptor
* @param wsdl wsdl definition corresponding to this endpoint
* @param su service unit object which created this endpoint.
*/
protected Endpoint(Role role, SUDescriptor.Service service, Definition wsdl, ServiceUnit su) {
this.mService = service;
this.mRole = role;
this.mWsdlDef = wsdl;
this.mSU = su;
}
/** Creates a new instance of Endpoint without service unit. may be useful for static endpoints that
* are not part of the deployment
* @param role CONSUMER or PRVODER role.
* @param service service info from the su descriptor
* @param wsdl wsdl definition corresponding to this endpoint
*/
protected Endpoint(Role role, SUDescriptor.Service service, Definition wsdl) {
this(role, service, wsdl, null);
}
/**
* should be called to initialize any resources related to this endpoint object
* throws JBIException
*/
public abstract void init() throws JBIException;
/**
* activates the endpoint to send/receive messages
* throws JBIException
*/
public abstract void activate() throws JBIException;
/**
* deactivates the endpoint
* throws JBIException
*/
public abstract void deactivate() throws JBIException;
/**
* clean endpoint
* throws JBIException
*/
public abstract void clean() throws JBIException;
public final Role getRole() {
return this.mRole;
}
public final boolean isProvider() {
return (Role.PROVIDER.equals(this.getRole()));
}
public final boolean isConsumer() {
return (Role.CONSUMER.equals(this.getRole()));
}
public final Definition getWSDL() {
return this.mWsdlDef;
}
public final SUDescriptor.Service getService() {
return this.mService;
}
public final ServiceEndpoint getServiceEndpoint() {
return this.mServiceEndpoint;
}
protected final void setServiceEndpoint(ServiceEndpoint svcEP) {
this.mServiceEndpoint = svcEP;
}
public final ServiceUnit getServiceUnit() {
return this.mSU;
}
/**
* generates an ID that would uniquely identify this endpoint implementation. Use as a key to map
* any information to store that is related to this endpoint.
*/
public final String getID() {
StringBuffer strBuff = new StringBuffer();
strBuff.append(this.mService.getInterface()).append("+");
strBuff.append(this.mService.getServiceName()).append("+");
strBuff.append(this.mService.getEndpointName()).append("+");
String roleType = null;
if ( Role.CONSUMER.equals(this.mRole) ) {
roleType = "CONSUMER";
} else if ( Role.PROVIDER.equals(this.mRole) ) {
roleType = "PROVIDER";
}
strBuff.append(roleType);
return strBuff.toString();
}
@Override
public String toString() {
return "Endpoint : " + "${symbol_escape}n" + this.mService;
}
/**
* checks if this endpoint is configured for the binding component or service engine.
*/
public boolean isFor${componentName}() {
boolean isFor${componentName} = false;
if ( this.mSU != null ) {
try {
isFor${componentName} = this.mSU.getSUDescriptor().isFor${componentName}();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return isFor${componentName};
}
public QName getOperationQName(String opName) {
return new QName(this.getService().getInterface().getNamespaceURI(), opName);
}
public Operation getWSDLOperation(QName opQName) {
String opName = null;
if ( opQName != null ) {
opName = opQName.getLocalPart();
}
Operation operation = WSDLProcessor.findOperation(this.getWSDL(),
this.getService().getInterface(), opName);
return operation;
}
public Binding getWSDLBinding() {
QName interfaceName = this.getService().getInterface();
QName serviceName = this.getService().getServiceName();
String endpointName = this.getService().getEndpointName();
if ( serviceName != null ) {
return WSDLProcessor.findServiceBinding(this.getWSDL(), serviceName, endpointName);
} else {
return WSDLProcessor.findInterfaceBinding(this.getWSDL(), interfaceName, null);
}
}
/** @return logger */
public Logger getLogger() {
return RuntimeHelper.getLogger();
}
/** @return ComponentContext */
public ComponentContext getComponentContext() {
return RuntimeHelper.getComponentContext();
}
/** @return DeliveryChannel */
public DeliveryChannel getDeliveryChannel() {
return RuntimeHelper.getDeliveryChannel();
}
/**
* helper function to get the MessageExchangeSupport object
*/
public MessageExchangeSupport getMessageExchangeSupport() {
return RuntimeHelper.getMessageExchangeSupport();
}
public MessageExchangeHandler createMessageExchangeHandler() {
return null;
}
/**
* creates the message exchange listener. Extended classes should return
* MessageExchangeListener implementation.
* @return MessageExchangeListener or null.
*
*/
protected MessageExchangeListener createMessageExchangeListener() {
return null;
}
/**
* Creates and adds message exchange listener to receive message exchange received notification.
*/
protected void addMessageExchangeListener() {
QName interfaceName = this.getService().getInterface();
QName serviceName = this.getService().getServiceName();
String endpointName = this.getService().getEndpointName();
MessageExchangeListener meListener = createMessageExchangeListener();
MessageExchangeSupport meListenerSupport = getMessageExchangeSupport();
if ( meListenerSupport != null && meListener != null ) {
meListenerSupport.addMessageExchangeListener(
this.getRole(), interfaceName, serviceName, endpointName, meListener);
if ( serviceName != null ) {
meListenerSupport.addMessageExchangeListener(
this.getRole(), null, serviceName, endpointName, meListener);
}
}
}
/**
* Removes message exchange listener from the MessageExchangeSupport.
*/
protected void removeMessageExchangeListener() {
QName interfaceName = this.getService().getInterface();
QName serviceName = this.getService().getServiceName();
String endpointName = this.getService().getEndpointName();
MessageExchangeSupport meListenerSupport = getMessageExchangeSupport();
if ( meListenerSupport != null ) {
meListenerSupport.removeMessageExchangeListener(
this.getRole(), interfaceName, serviceName, endpointName);
if ( serviceName != null ) {
meListenerSupport.removeMessageExchangeListener(
this.getRole(), null, serviceName, endpointName);
}
}
}
public final boolean processMessageExchangeWithHandler(ExchangeStatus status, MessageExchange me) {
//1. lookup handler
//2. if not there create one and register
//3. call process message exchange on it
//4. check status. if that is the end, remove the handler
MessageExchangeSupport support = this.getMessageExchangeSupport();
if ( support == null ) {
getLogger().fine("No MessageExchangeSupport present");
return false;
}
MessageExchangeHandler handler = support.findMessageExchangeHandler(me);
if ( handler == null ) {
handler = this.createMessageExchangeHandler();
if ( handler == null ) {
getLogger().fine("MessageExchangeHandler not supported");
return false;
}
support.addMessageExchangeHandler(me, handler);
}
handler.processMessageExchange(status, me);
getLogger().fine("XXX MX Handler processed ME with STATUS: " + status);
if (!ExchangeStatus.ACTIVE.equals(status) ) {
// DONE or ERROR means done with the me.
getLogger().fine("End of ME processing. STATUS: " + status +
". Removing the MX Handler ...");
support.removeMessageExchangeHandler(me);
}
return true;
}
}

View File

@ -0,0 +1,107 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* ProviderEndpoint.java
*
*/
package net.openesb.component.${componentName}.common.deployment;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Service;
import javax.jbi.JBIException;
import javax.jbi.messaging.MessageExchange.Role;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.wsdl.Definition;
/**
* This class extends from Endpoint class and implements lifecycle methods functionality required for the
* endpoint for a service provider. {@link ServiceUnit${symbol_pound}createProviderEndpoint} creates the object of this
* type to implement the service provider functionality. It makes sure that this class or the extended
* classes will activate or deactivate the <code>ServiceEndpoint</code> corresponding to the service
* provided by the endpoint is performed during the activate and deactivate method calls as part of the
* endpoint lifecycle.
*
* @see ServiceUnit${symbol_pound}createProviderEndpoint
* @author chikkala
*/
public class ProviderEndpoint extends Endpoint {
/**
* This constructor initializes the endpoint with PROVIDER role and makes sure that the service
* description passed to it is of provider description.
*/
protected ProviderEndpoint(SUDescriptor.Provides provides, Definition wsdlDef, ServiceUnit su) {
super(Role.PROVIDER, provides, wsdlDef, su);
}
/**
* constructor that does not need service unit information. useful for creating the endpoint for
* static services provided by the component.
*/
protected ProviderEndpoint(SUDescriptor.Provides provides, Definition wsdlDef) {
this(provides, wsdlDef, null);
}
/**
* initializes the endpoint and creates and registers the MessageExchangeListener with
* MessageExchangeSupport.
*/
public final void init() throws JBIException {
getLogger().fine("ProviderEndpiont: init called");
doInit(); //1. initialize the endpiont resources
addMessageExchangeListener(); //2. register message exchange linster.
}
/**
* calls activatesServiceEndpoint for the Provider.
*/
public final void activate() throws JBIException {
getLogger().fine("ProviderEndpiont: activate called");
activateServiceEndpoint(); //1. activate service endpoint in NMR
doActivate(); //2. do any other activation related tasks.
}
/**
* calls deactivateServiceEndpoint for the Provider.
*/
public final void deactivate() throws JBIException {
getLogger().fine("ProviderEndpiont: deactivate called");
deactivateServiceEndpoint(); //1. deactivates the service endpoint in NMR
doDeactivate(); //2. do any other deactivation related tasks.
}
/**
* removes the message exchange listener. cleans up other resources
*/
public final void clean() throws JBIException {
getLogger().fine("ProviderEndpiont: clean called");
removeMessageExchangeListener(); //1. remove message exchange listener
doClean(); //2. clean up any other resources.
}
/**
* Activates the ServiceEndpoint with NMR
*/
private void activateServiceEndpoint() throws JBIException {
Service service = this.getService();
ServiceEndpoint svcEP = this.getComponentContext().activateEndpoint(
service.getServiceName(), service.getEndpointName());
this.setServiceEndpoint(svcEP);
}
/**
* Deactivates ServiceEndpoint in NMR
*/
private void deactivateServiceEndpoint() throws JBIException {
this.getComponentContext().deactivateEndpoint(this.getServiceEndpoint());
this.setServiceEndpoint(null);
}
protected void doInit() throws JBIException {
//NOOP
}
protected void doActivate() throws JBIException {
//NOOP
}
protected void doDeactivate() throws JBIException {
//NOOP
}
protected void doClean() throws JBIException {
//NOOP
}
}

View File

@ -0,0 +1,364 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* SUDescriptor.java
*/
package net.openesb.component.${componentName}.common.deployment;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.jbi.management.DeploymentException;
import javax.xml.namespace.QName;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
* This interface represent the service unit descriptor (jbi.xml) model. This will be used in
* ServiceUnit implementation to find the services provided and consumed by this service unit.
* {@link SUDescriptorFactory${symbol_pound}getSUDescriptor} method reads the jbi.xml in the service unit to
* to the implementation of this interface.
*
* @see SUDescriptorFactory
* @see Consumes
* @see Provides
* @see ServiceUnit
*
* @author chikkala
*/
public interface SUDescriptor {
Collection<Provides> getProvidedServices();
Collection<Consumes> getConsumedServices();
boolean isFor${componentName}();
/**
* base interface that models the service information described in the service unit descriptor for
* consumed services and provided services.
*/
public interface Service {
/**
* Getter for property interfaceQName.
* @return Value of property interfaceQName.
*/
QName getInterface();
/**
* Getter for property serviceName.
* @return Value of property serviceName.
*/
QName getServiceName();
/**
* Getter for property endpointName.
* @return Value of property endpointName.
*/
String getEndpointName();
}
/**
* marker interface that represents the provided services in the service unit
*/
public interface Provides extends Service {
}
/**
* this interface represents the consumed service information in the su descriptor.
*/
public interface Consumes extends Service {
public final static String STANDARD_LINK = "standard";
public final static String SOFT_LINK = "soft";
public final static String HARD_LINK = "hard";
/**
* Getter for property linkType.
* @return Value of property linkType.
*/
String getLinkType();
}
/**
* This is a factory class that can build the Service Unit Descriptor model from the jbi.xml
*/
public static class SUDescriptorFactory {
protected final static String JBI_TAG_NAME = "services";
protected final static String SERVICES_TAG_NAME = "services";
protected final static String BC_TAG_NAME = "binding-component";
protected final static String PROVIDES_TAG_NAME = "provides";
protected final static String CONSUMES_TAG_NAME = "consumes";
protected final static String INTERFACE_TAG_NAME = "interface-name";
protected final static String SERVICE_TAG_NAME = "service-name";
protected final static String ENDPOINT_TAG_NAME = "endpoint-name";
protected final static String LINK_TYPE_TAG_NAME = "link-type";
/**
* method that builds the Service unit descriptor model from the jbi.xml
*/
public static SUDescriptor getSUDescriptor(String jbiXmlPath) throws Exception {
FileReader reader = null;
try {
reader = new FileReader(jbiXmlPath);
SUDescriptor suDesc = getSUDescriptor(reader);
return suDesc;
} finally {
if ( reader != null ) {
try {
reader.close();
} catch (IOException ex) {
// ignore
}
}
}
}
/**
* method that builds the Service unit descriptor model from the jbi.xml
*/
public static SUDescriptor getSUDescriptor(Reader reader) throws Exception {
SUDescriptor suDescriptor = null;
Document suDescDoc = RuntimeHelper.buildDOMDocument(reader);
Element jbiEl = suDescDoc.getDocumentElement();
if (JBI_TAG_NAME.equals(jbiEl.getTagName())) {
throw new DeploymentException("Invalid service unit descriptor : no jbi root element");
}
NodeList servicesNL = jbiEl.getElementsByTagName(SERVICES_TAG_NAME);
if (servicesNL != null && servicesNL.getLength() == 1) {
Element servicesEl = (Element) servicesNL.item(0);
suDescriptor = SUDescriptorImpl.createSUDescriptor(servicesEl);
} else {
throw new DeploymentException("Invalid service unit descriptor : invalid services element");
}
return suDescriptor;
}
}
/**
* This class implements SUDescriptor
*/
public static class SUDescriptorImpl implements SUDescriptor {
private List<Consumes> mConsumedList;
private List<Provides> mProvidedList;
private boolean mIsFor${componentName};
protected SUDescriptorImpl(boolean isFor${componentName}) {
this.mIsFor${componentName} = isFor${componentName};
this.mConsumedList = new ArrayList<Consumes>();
this.mProvidedList = new ArrayList<Provides>();
}
protected void addProvidedService(Provides provides) {
this.mProvidedList.add(provides);
}
protected void addConsumedService(Consumes consumes) {
this.mConsumedList.add(consumes);
}
public Collection<Provides> getProvidedServices() {
// return unmodifiable collection
return Collections.unmodifiableCollection(this.mProvidedList);
}
public Collection<Consumes> getConsumedServices() {
// return unmodifiable collection
return Collections.unmodifiableCollection(this.mConsumedList);
}
public boolean isFor${componentName}() {
return this.mIsFor${componentName};
}
protected static SUDescriptor createSUDescriptor(Element servicesEl) throws Exception {
boolean isForBC = false;
String bcTagString = servicesEl.getAttribute(SUDescriptorFactory.BC_TAG_NAME);
isForBC = Boolean.valueOf(bcTagString).booleanValue();
SUDescriptorImpl suDesc = new SUDescriptorImpl(isForBC);
// add consumes
NodeList consumesNL = servicesEl.getElementsByTagName(SUDescriptorFactory.CONSUMES_TAG_NAME);
for ( int i=0; i < consumesNL.getLength(); ++i) {
Element consumesEl = (Element) consumesNL.item(i);
Consumes consumes = ConsumedService.createConsumedService(consumesEl);
suDesc.addConsumedService(consumes);
}
// add provides
NodeList providesNL = servicesEl.getElementsByTagName(SUDescriptorFactory.PROVIDES_TAG_NAME);
for ( int i=0; i < providesNL.getLength(); ++i) {
Element providesEl = (Element) providesNL.item(i);
Provides provides = ProvidedService.createProvidedService(providesEl);
suDesc.addProvidedService(provides);
}
return suDesc;
}
}
/**
* Base class that implements the Service interface
*/
public static abstract class AbstractService implements Service {
private QName mInterface;
private QName mServiceName;
private String mEndpointName;
private AbstractService() {
}
/**
* Getter for property interfaceQName.
* @return Value of property interfaceQName.
*/
public QName getInterface() {
return this.mInterface;
}
/**
* Setter for property interfaceQName.
* @param interfaceQName New value of property interfaceQName.
*/
protected void setInterface(QName interfaceQName) {
this.mInterface = interfaceQName;
}
/**
* Getter for property serviceName.
* @return Value of property serviceName.
*/
public QName getServiceName() {
return this.mServiceName;
}
/**
* Setter for property serviceName.
* @param serviceName New value of property serviceName.
*/
protected void setServiceName(QName serviceName) {
this.mServiceName = serviceName;
}
/**
* Getter for property endpointName.
* @return Value of property endpointName.
*/
public String getEndpointName() {
return this.mEndpointName;
}
/**
* Setter for property endpointName.
* @param endpointName New value of property endpointName.
*/
protected void setEndpointName(String endpointName) {
this.mEndpointName = endpointName;
}
}
/**
* This class implements the Provides interface
*/
public static class ProvidedService
extends AbstractService
implements Provides {
protected ProvidedService(QName interfaceQName, QName serviceName, String endpointName) {
this.setInterface(interfaceQName);
this.setServiceName(serviceName);
this.setEndpointName(endpointName);
}
@Override
public String toString() {
return "Provides :" +
"${symbol_escape}n${symbol_escape}t interface-name= " + getInterface() +
"${symbol_escape}n${symbol_escape}t service-name= " + getServiceName() +
"${symbol_escape}n${symbol_escape}t endpont-name= " + getEndpointName();
}
protected static Provides createProvidedService(Element providesEl) throws Exception {
String ifName = providesEl.getAttribute(SUDescriptorFactory.INTERFACE_TAG_NAME);
String serviceName = providesEl.getAttribute(SUDescriptorFactory.SERVICE_TAG_NAME);
String endpointName = providesEl.getAttribute(SUDescriptorFactory.ENDPOINT_TAG_NAME);
if ( ifName == null || serviceName == null || endpointName == null ) {
throw new Exception("Invalid provides element: missing " + SUDescriptorFactory.INTERFACE_TAG_NAME +
" or " + SUDescriptorFactory.SERVICE_TAG_NAME + " or " + SUDescriptorFactory.ENDPOINT_TAG_NAME );
}
QName ifQName = RuntimeHelper.resolveAttrQName(ifName, providesEl);
QName serviceQName = RuntimeHelper.resolveAttrQName(serviceName, providesEl);
return new ProvidedService(ifQName, serviceQName, endpointName);
}
}
/**
* This class implements the Consumes interface.
*/
public static class ConsumedService
extends AbstractService
implements Consumes {
private String mLinkType;
protected ConsumedService(QName interfaceQName,
QName serviceName, String endpointName, String linkType) {
this.setInterface(interfaceQName);
this.setServiceName(serviceName);
this.setEndpointName(endpointName);
this.mLinkType = linkType;
}
/**
* Getter for property linkType.
* @return Value of property linkType.
*/
public String getLinkType() {
return this.mLinkType;
}
@Override
public String toString() {
return "Cosumes :" +
"${symbol_escape}n${symbol_escape}t interface-name= " + getInterface() +
"${symbol_escape}n${symbol_escape}t service-name= " + getServiceName() +
"${symbol_escape}n${symbol_escape}t endpont-name= " + getEndpointName() +
"${symbol_escape}n${symbol_escape}t link-type= " + getLinkType();
}
protected static Consumes createConsumedService(Element consumesEl) throws Exception {
String ifName = consumesEl.getAttribute(SUDescriptorFactory.INTERFACE_TAG_NAME);
String serviceName = consumesEl.getAttribute(SUDescriptorFactory.SERVICE_TAG_NAME);
String endpointName = consumesEl.getAttribute(SUDescriptorFactory.ENDPOINT_TAG_NAME);
String linkType = consumesEl.getAttribute(SUDescriptorFactory.LINK_TYPE_TAG_NAME);
if ( linkType == null || linkType.trim().length() == 0 ) {
linkType = STANDARD_LINK;
}
if ( ifName == null ) {
throw new Exception("Invalid consumes element: missing " +
SUDescriptorFactory.INTERFACE_TAG_NAME );
}
if ( serviceName == null || endpointName == null ) {
throw new Exception("Invalid consumes element: missing " +
SUDescriptorFactory.SERVICE_TAG_NAME + " or "
+ SUDescriptorFactory.ENDPOINT_TAG_NAME );
}
QName ifQName = RuntimeHelper.resolveAttrQName(ifName, consumesEl);
QName serviceQName = null;
if ( serviceName != null ) {
serviceQName = RuntimeHelper.resolveAttrQName(serviceName, consumesEl);
}
if ( serviceQName != null && endpointName != null && linkType != null ) {
if (!(STANDARD_LINK.equals(linkType) ||
SOFT_LINK.equals(linkType) || HARD_LINK.equals(linkType)) ) {
throw new Exception("Invalid consumes attribute value" +
SUDescriptorFactory.LINK_TYPE_TAG_NAME + "=" + linkType);
}
}
return new ConsumedService(ifQName, serviceQName, endpointName, linkType);
}
}
}

View File

@ -0,0 +1,464 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* ServiceUnit.java
*
*/
package net.openesb.component.${componentName}.common.deployment;
import net.openesb.component.${componentName}.common.RuntimeHelper;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Consumes;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Provides;
import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Service;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.File;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jbi.management.DeploymentException;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
/**
* This is an abstract class that implements the service unit functionality in the component which
* processes the service unit artifacts and implement the actual service unit lifecycle functionality.
* The AbstractServiceUnitManager and its extended classes that implement the ServiceUnitManager
* functionality creates and maintains the reference to the concrete implementation of this class to
* invoke the functionality implemented by this class and its concrete implementation during the
* execution of the ServiceUnitMangers lifecycle methods by the jbi runtime.
* <p>
* The main lifecycle methods of this class that will be called by the ServiceUnitManger implementation
* during the service unit deployment lifecycle are {@link ${symbol_pound}doload}, {@link ${symbol_pound}doDeploy}, {@link ${symbol_pound}doUndeploy},
* {@link ${symbol_pound}doInit}, {@link ${symbol_pound}doStart}, {@link ${symbol_pound}doStop} and {@link ${symbol_pound}doShutdown}
* <p>
* Service unit processing supported by this implementation is based on wsdl 1.1 deployments where the
* services provided and consumed in this service unit are described using wsdl 1.1 definitions.
* <p>
* The main service unit artifacts that will be processed during deployment lifecycle of the service
* unit are 1.Service unit descriptor(jbi.xml) that describes the services provided and consumed by
* this service unit. 2.WSDL 1.1 document that describes the service definition 3.Component specific
* configurations related to services provided and consumed by this service unit.
* <p>
* When the service unit is for Binding Component, the component specific configurations are read
* from the WSDL1.1 extensions defined in the WSDL document corresponding to the service provider
* or consumer deployed with this service unit.
* <p>
* When the service unit is for Service Engine, the component specific configurations are read
* from the deployment artifacts such as xslt files and mapping files in the service unit zip file
* along with the WSDL document corresponding to the service provider or consumer deployed with this
* service unit.
*
* @see SUDescriptor
* @see Endpoint
* @see ProviderEndpoint
* @see ConsumerEndpoint
* @see WSDLProcessor
* @author chikkala
*/
public abstract class ServiceUnit {
/** Service Unit Name */
private String mSUName;
/** Service Unit Root path passed by jbi runtime */
private String mSURootPath;
/** service unit descriptor model unmarshalled from service unit jbi.xml */
private SUDescriptor mSUDescriptor;
/** Map of Endpoint Key to ProviderEndpoint configurations in this service unit */
private Map<String, ProviderEndpoint> mProviderEndpointMap;
/** Map of Endpoint Key to ConsumerEndpoint configurations in this service unit */
private Map<String, ConsumerEndpoint> mConsumerEndpointMap;
/** Map of Service Key to the WSDL Definition in this service unit */
private Map<String, Definition> mWSDLMap;
/** WSDLProcessor configured for this service unit to process wsdls in the service unit */
private WSDLProcessor mWSDLProcessor;
/**
*
* @param suName
* @param suRootPath
*/
protected ServiceUnit(String suName, String suRootPath) {
this.mSUName = suName;
this.mSURootPath = suRootPath;
this.mSUDescriptor = null;
this.mWSDLMap = new HashMap<String,Definition>();
this.mProviderEndpointMap = new HashMap<String, ProviderEndpoint>();
this.mConsumerEndpointMap = new HashMap<String, ConsumerEndpoint>();
}
/** returns service unit name
* @return service unit name
*/
public String getName() {
return this.mSUName;
}
/** returns service unit root path where the su artifacts are unzipped by the jbi runtime
* @return path to the service unit root directory.
*/
public String getSURootPath() {
return this.mSURootPath;
}
protected SUDescriptor createSUDescriptor() throws Exception {
File jbiXmlFile = new File(this.getSURootPath(), "META-INF/jbi.xml");
String jbiXmlPath = jbiXmlFile.getAbsolutePath();
return SUDescriptor.SUDescriptorFactory.getSUDescriptor(jbiXmlPath);
}
/** return the Service unit descriptor model that was read from the jbi.xml
* @return SUDescriptor
*/
public SUDescriptor getSUDescriptor() throws Exception {
if ( this.mSUDescriptor == null ) {
this.mSUDescriptor = createSUDescriptor();
}
return this.mSUDescriptor;
}
public ProviderEndpoint getProviderEndpoint(String providerID) {
return this.mProviderEndpointMap.get(providerID);
}
public Collection<ProviderEndpoint> getProviderEndpoints() {
return Collections.unmodifiableCollection(this.mProviderEndpointMap.values());
}
public ConsumerEndpoint getConsumerEndpoint(String cosumerID) {
return this.mConsumerEndpointMap.get(cosumerID);
}
public Collection<ConsumerEndpoint> getConsumerEndpoints() {
return Collections.unmodifiableCollection(this.mConsumerEndpointMap.values());
}
/**
* @return Logger
*/
protected Logger getLogger() {
return RuntimeHelper.getLogger();
}
/**
* extended classes implement this method to create the su specific WSDLProcessor. for examples,
* a su supporting binding component may have wsdl extensions that it want to registry for reading
* the configurations from the wsdl file.
* @return WSDLProcessor
* @see com.sun.jbi.sample.component.common.wsdl.WSDLProcessor
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
*/
protected WSDLProcessor createWSDLProcessor() {
return new WSDLProcessor(this.getSURootPath());
}
/**
* return the WSDLProcessor reference by creates if it is not yet created.
* @return WSDLProcessor.
*/
public final WSDLProcessor getWSDLProcessor() {
if ( this.mWSDLProcessor == null ) {
this.mWSDLProcessor = createWSDLProcessor();
}
return this.mWSDLProcessor;
}
/**
* loads the service unit artifacts into the SU model. AbstractServiceUnitManager implementation
* calls this method during the during deploy and init lifecycle methods when the service unit
* object is newly created.
*/
public void doLoad() throws DeploymentException {
try {
SUDescriptor suDesc = getSUDescriptor(); // load jbi.xml
loadServiceDefinitions(); // check if the wsdls are valid for corresponding services.
loadOtherArtifacts(); // additional validations specific to component deployment features.
loadEndpoints(); // create endpoints
} catch ( DeploymentException jbiEx) {
throw jbiEx;
} catch (Exception ex) {
throw new DeploymentException(ex);
}
}
/** extended classes implement this method to perform the su specific deployment related tasks in
* this method implementation.
* @throws DeploymentException on error.
*/
public void doDeploy() throws DeploymentException {
// NOOP. doLoad has done it all.
this.getLogger().fine("ServiceUnit.doDeploy");
}
/** extended classes implement this method to perform the su specific undeployment related tasks in
* this method implementation.
* @throws DeploymentException on error.
*/
public void doUndeploy() throws DeploymentException {
//NOOP
this.getLogger().fine("ServiceUnit.doUndeploy");
}
/** extended classes implement this method to perform the su specific initialization tasks in
* this method implementation.
* @throws DeploymentException on error.
*/
public void doInit() throws DeploymentException {
this.getLogger().fine("ServiceUnit.doInit");
this.doInitEndpoints();
}
/** extended classes implement this method to perform the su specific tasks on start in
* this method implementation.
* @throws DeploymentException on error.
*/
public void doStart() throws DeploymentException {
this.getLogger().fine("ServiceUnit.doStart");
this.doActivateEndpoints();
}
/** extended classes implement this method to perform the su specific tasks on stop in
* this method implementation.
* @throws DeploymentException on error.
*/
public void doStop() throws DeploymentException {
this.getLogger().fine("ServiceUnit.doStop");
this.doDeactivateEndpoints();
}
/** extended classes implement this method to perform the su specific tasks on shutdown in
* this method implementation.
* @throws DeploymentException on error.
*/
public void doShutdown() throws DeploymentException {
this.getLogger().fine("ServiceUnit.doShutdown");
this.doCleanEndpoints();
}
/**
* create the ProviderEndpoint that implement the service provider implementation specific to this su.
* @return ProviderEndpoint or null if the SU does not support the service provider access
*/
protected ProviderEndpoint createProviderEndpoint(Provides provides, Definition wsdlDef) {
return null;
}
/**
* create the ProviderEndpoint that implement the service consumer implementation specific to this su.
* @return ConsumerEndpoint or null if the SU does not support the service consumer access
*/
protected ConsumerEndpoint createConsumerEndpoint(Consumes consumes, Definition wsdlDef) {
return null;
}
/**
* generates the key based on the service to store the wsdl definitions .
*/
protected String getServiceKey(Service service) {
StringBuffer strBuff = new StringBuffer();
strBuff.append(service.getInterface()).append("+");
strBuff.append(service.getServiceName()).append("+");
strBuff.append(service.getEndpointName());
return strBuff.toString();
}
/**
* looks up the wsdl definition loaded for this service.
*/
protected Definition findWSDLFor(Service service) throws WSDLException {
Definition wsdlDef = null;
String key = this.getServiceKey(service);
wsdlDef = this.mWSDLMap.get(key);
return wsdlDef;
}
protected Definition findWSDL(List<Definition> wsdlList, Service service, boolean ignoreEndpointLookup) {
Definition foundDef = null;
for ( Definition def : wsdlList ) {
if ( WSDLProcessor.isWSDLFor(def, service.getInterface(), service.getServiceName(),
((ignoreEndpointLookup) ? null : service.getEndpointName()) ) ) {
foundDef = def;
break;
}
}
return foundDef;
}
/**
* loads the WSDL definitions corresponds to the service providers and consumers defined in the
* service unit descriptor.
*/
protected void loadServiceDefinitions() throws Exception {
this.mWSDLMap = new HashMap<String,Definition>();
WSDLProcessor wsdlProcessor = getWSDLProcessor();
List<Definition> wsdlList = wsdlProcessor.readWSDLs(this.getSURootPath());
this.getLogger().fine("Number of wsdl definitions in service unit " + wsdlList.size());
List<Service> services = new ArrayList<Service>();
services.addAll(this.getSUDescriptor().getProvidedServices());
services.addAll(this.getSUDescriptor().getConsumedServices());
boolean isForBinding = this.getSUDescriptor().isFor${componentName}();
this.getLogger().fine("Is this service unit for Binding? " + isForBinding);
for ( Service service : services ) {
this.getLogger().fine("Looking up WSDL for service " + service);
boolean ignoreEndpointLookup = false;
boolean providerAtEngine = false;
if ( !isForBinding && service instanceof Provides ) {
ignoreEndpointLookup = true;
providerAtEngine = true;
}
Definition def = findWSDL(wsdlList, service, ignoreEndpointLookup);
if ( def == null ) {
throw new Exception("WSDL Definition not found for " + service);
}
this.mWSDLMap.put(getServiceKey(service), def);
if ( providerAtEngine ) {
// provider at engine. so add engine binding and endpoint to the wsdl
wsdlProcessor.createServiceEngineBinding(def,
service.getInterface(), service.getServiceName(), service.getEndpointName());
}
}
}
/** extended classes implement this method to perform the su specific artifacts validation in
* this method implementation.
* @throws DeploymentException on error.
*/
protected void loadOtherArtifacts() throws DeploymentException {
// nothing to validate further.
this.getLogger().fine("ServiceUnit.loadOtherArtifacts");
}
/**
* creates ProviderEndpoint and ConsumerEndpoint objects corresponding to the service providers
* and consumers described in the su descriptor ( jbi.xml )
*/
protected void loadEndpoints() throws Exception {
this.mProviderEndpointMap = new HashMap<String, ProviderEndpoint>();
this.mConsumerEndpointMap = new HashMap<String, ConsumerEndpoint>();
Collection<Provides> providesList = this.getSUDescriptor().getProvidedServices();
for ( Provides provides : providesList ) {
Definition wsdlDef = findWSDLFor(provides);
if ( wsdlDef == null ) {
throw new DeploymentException("WSDL Definitions not found for " + provides);
}
ProviderEndpoint provider = createProviderEndpoint(provides, wsdlDef);
this.mProviderEndpointMap.put(provider.getID(), provider);
}
Collection<Consumes> consumesList = this.getSUDescriptor().getConsumedServices();
for ( Consumes consumes : consumesList ) {
Definition wsdlDef = findWSDLFor(consumes);
if ( wsdlDef == null ) {
throw new DeploymentException("WSDL Definitions not found for " + consumes);
}
ConsumerEndpoint consumer = createConsumerEndpoint(consumes, wsdlDef);
this.mConsumerEndpointMap.put(consumer.getID(), consumer);
}
}
/**
* initializes the Endpoint objects created corresponding to the consumer and providers defined
* in the su descriptor
*/
protected void doInitEndpoints() throws DeploymentException {
// init endpoints. if any initialization fails, rollback the already inited endpoints
List<Endpoint> initedEndpoints = new ArrayList<Endpoint>();
List<Endpoint> allEndpoints = new ArrayList<Endpoint>();
allEndpoints.addAll(this.getProviderEndpoints());
allEndpoints.addAll(this.getConsumerEndpoints());
for ( Endpoint endpoint : allEndpoints ) {
try {
endpoint.init();
initedEndpoints.add(endpoint);
} catch ( Exception initEx) {
doCleanEndpoints(initedEndpoints);
throw new DeploymentException(initEx);
}
}
}
/**
* invokes activates method of all provider and consumer endpoint object in this su. if there is
* and error activating any one the endpoints, it deactivates the already activated ones and throws
* the error
*/
protected void doActivateEndpoints() throws DeploymentException {
// activate providers first and then consumers
List<Endpoint> activatedEndpoints = new ArrayList<Endpoint>();
List<Endpoint> allEndpoints = new ArrayList<Endpoint>();
allEndpoints.addAll(this.getProviderEndpoints());
allEndpoints.addAll(this.getConsumerEndpoints());
for ( Endpoint endpoint : allEndpoints ) {
try {
endpoint.activate();
activatedEndpoints.add(endpoint);
} catch ( Exception actEx) {
doDeactivateEndpoints(activatedEndpoints);
throw new DeploymentException(actEx);
}
}
}
/**
* invokes deactivate method on the list of Endpoint objects passed to this method
*/
protected void doDeactivateEndpoints(List<Endpoint> endpoints) {
for ( Endpoint endpoint : endpoints ) {
try {
endpoint.deactivate();
} catch(Exception ex) {
// ignore the exception and log it.
this.getLogger().log(Level.FINE, ex.getMessage(), ex);
}
}
}
/**
* invokes deactivate method on the all consumer and provider endpoint objects
*/
protected void doDeactivateEndpoints() {
// deactivate consumers first and then the providers
List<Endpoint> allEndpoints = new ArrayList<Endpoint>();
allEndpoints.addAll(this.getConsumerEndpoints());
allEndpoints.addAll(this.getProviderEndpoints());
doDeactivateEndpoints(allEndpoints);
}
/**
* invokes clean method on the list of endpoint objects
*/
protected void doCleanEndpoints(List<Endpoint> endpoints) {
for ( Endpoint endpoint : endpoints ) {
try {
endpoint.clean();
} catch(Exception ex) {
// ignore the exception and log it.
this.getLogger().log(Level.FINE, ex.getMessage(), ex);
}
}
}
/**
* invokes clean method on the all consumer and provider endpoint objects in this su.
*/
protected void doCleanEndpoints() {
List<Endpoint> allEndpoints = new ArrayList<Endpoint>();
allEndpoints.addAll(this.getConsumerEndpoints());
allEndpoints.addAll(this.getProviderEndpoints());
doCleanEndpoints(allEndpoints);
}
/**
* prints the service unit description
*/
protected final String printDetails() {
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
out.println("ServiceUnit Name : " + this.getName());
out.println("ServiceUnit Root : " + this.getSURootPath());
SUDescriptor suDesc = null;
try {
suDesc = this.getSUDescriptor();
for ( SUDescriptor.Consumes consumer : suDesc.getConsumedServices()) {
out.println(consumer);
}
for ( SUDescriptor.Provides provides : suDesc.getProvidedServices()) {
out.println(provides);
}
} catch (Exception ex) {
ex.printStackTrace(out);
}
return writer.getBuffer().toString();
}
}

View File

@ -0,0 +1,44 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractExtensibilityElement.java
*/
package net.openesb.component.${componentName}.common.wsdl;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.xml.namespace.QName;
/**
* This is an abstract class which can be extended to create jwsdl (wsdl4j's) extension elements model to
* read/write the wsdl extension elements in wsdl 1.1 xml.
*
* @author chikkala
*/
public abstract class AbstractExtensibilityElement implements ExtensibilityElement, java.io.Serializable {
public static final long serialVersionUID = 1;
private QName mElementType;
private Boolean mRequired;
/** Creates a new instance of AbstractExtensibilityElement */
protected AbstractExtensibilityElement() {
}
public void setElementType(QName elementType) {
this.mElementType = elementType;
}
public QName getElementType() {
return this.mElementType;
}
public void setRequired(Boolean required) {
this.mRequired = required;
}
public Boolean getRequired() {
return this.mRequired;
}
}

View File

@ -0,0 +1,45 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractExtensionRegistry.java
*/
package net.openesb.component.${componentName}.common.wsdl;
import java.util.List;
import javax.wsdl.extensions.ExtensionRegistry;
/**
* This is the abstract class used to add the wsdl extension serializers and deserializers to the
* wsdl extension registry configured to read/write wsdl extensions into a know java model.
* @see AbstractExtensionSerializer
* @see WSDLProcessor
* @author chikkala
*/
public abstract class AbstractExtensionRegistry extends ExtensionRegistry {
/** Creates a new instance of AbstractSerializer
* it calls the <code>createSerializers<code> method to get the list of
* serializers and then call registerSerializer on each AbstractExtensionSerializer
* to register them with this registry.
* @see AbstractExtensionSerializer${symbol_pound}registerSerializer
*/
protected AbstractExtensionRegistry() {
super();
List<AbstractExtensionSerializer> list = createSerializers();
for (AbstractExtensionSerializer ser : list ) {
ser.registerSerializer(this);
}
// register ServiceEngine Binding serializers
AbstractExtensionSerializer seBindingSer = new SEBindingExt.SEBindingExtSerializer();
seBindingSer.registerSerializer(this);
}
/**
* create wsdl extension serializers for each extension element to register with the extension
* registry.
* @return List of AbstractExtensionSerializer objects for serializing/deserializing the wsdl extensions.
* @see AbstractExtensionSerializer
*/
protected abstract List<AbstractExtensionSerializer> createSerializers();
}

View File

@ -0,0 +1,123 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractExtensionSerializer.java
*/
package net.openesb.component.${componentName}.common.wsdl;
import java.io.PrintWriter;
import java.io.Serializable;
import java.util.Set;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionDeserializer;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.wsdl.extensions.ExtensionSerializer;
import javax.xml.namespace.QName;
import org.w3c.dom.Attr;
import org.w3c.dom.Element;
/**
* This class is an abstract class that should be extended to implements extension serializer and
* deserializer. This class implements the code required for registering the serializer and deserializer
* implemented by this class. THe AbstractExtensionRegistry class calls the ${symbol_pound}registerSerializer method
* to register the concrete implementation of this class with extension registry.
* @see AbstractExtensionRegistry
* @author chikkala
*/
public abstract class AbstractExtensionSerializer
implements ExtensionSerializer, ExtensionDeserializer, Serializable {
public static final long serialVersionUID = 1;
private Class mParentType;
private Class mExtensionType;
private QName mElementType;
/** Creates a new instance of AbstractSerializer */
public AbstractExtensionSerializer(Class parentType, QName elementType, Class extensionType) {
this.mParentType = parentType;
this.mElementType = elementType;
this.mExtensionType = extensionType;
}
public Class getParentType() {
return this.mParentType;
}
public QName getElementType() {
return this.mElementType;
}
public Class getExtensionType() {
return this.mExtensionType;
}
public void registerSerializer(ExtensionRegistry extReg) {
extReg.registerSerializer(this.mParentType, this.mElementType, this);
extReg.registerDeserializer(this.mParentType, this.mElementType, this);
extReg.mapExtensionTypes(this.mParentType, this.mElementType, this.mExtensionType);
}
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg ) throws WSDLException {
// DO NOTHING. Binding component runtime does not need to serialize the wsdl extensions.
}
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
return null;
}
public static String getAttribute(Element el, String attrName) {
String attrValue = null;
Attr attr = el.getAttributeNode(attrName);
if ( attr != null ) {
attrValue = attr.getValue();
}
return attrValue;
}
protected String getNamespacePrefix(Definition def, String namespaceURI, String defPrefix) {
String prefix = null;
prefix = def.getPrefix(namespaceURI);
if ( prefix == null ) {
Set keySet = def.getNamespaces().keySet();
String newPrefix = "ns";
if ( defPrefix != null && defPrefix.trim().length() > 0 ){
newPrefix = defPrefix;
}
prefix = newPrefix;
for ( int i=0; i < Integer.MAX_VALUE; ++i) {
if (!keySet.contains(prefix)) {
break;
} else {
prefix = newPrefix + i;
}
}
}
return prefix;
}
/**
* @return the name with the prefix defined for the namespaceURI in the wsdl definition.
* @throws WSDLException if the prefix not found in the wsdl definition. note that the
* default prefix is an empty string.
*/
protected String getQualifiedName(Definition def,
String namespaceURI, String localName) throws WSDLException {
String prefix = null;
if (namespaceURI != null && !namespaceURI.equals("")) {
prefix = def.getPrefix(namespaceURI);
if ( prefix == null ) {
throw new WSDLException(WSDLException.OTHER_ERROR,
"Can not find prefix in WSDL Definition for " + namespaceURI);
}
}
if ( prefix != null && !prefix.equals("")) {
return prefix + ":" + localName;
} else {
return localName;
}
}
}

View File

@ -0,0 +1,229 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* AbstractNormalizer.java
*/
package net.openesb.component.${componentName}.common.wsdl;
import java.util.ArrayList;
import java.util.List;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.Message;
import javax.wsdl.Operation;
import javax.wsdl.Part;
import javax.xml.namespace.QName;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
/**
* This is an abstract class that implements most of the functionality to normalize the binding protocol
* specific concrete message to jbi wrapper and and denormalize jbi wrapper to the concrete binding
* protocol specific message.
* <p>
* The extended classes specific to particular binding protocol will be used when a jbi binding
* component is sending and receiving messages from the external service providers and consumers using
* a particular binding protocol known to this class. Extended implementation of this class should make
* use of the helper methods in this class in normalizing and denormalizing the messages.
* @see JMXBindingNormalizer
* @author chikkala
*/
public abstract class AbstractNormalizer {
public static final String XMLNS_NS = "http://www.w3.org/2000/xmlns/";
/** wsdl definition to use when normalizing and denormalizing */
private Definition mWSDL;
/** Binding definition to use when normalizing and denormalizing */
private Binding mBinding;
private AbstractNormalizer() {}
/** Creates a new instance of JMXBCNormalizer */
public AbstractNormalizer(Definition wsdl, Binding binding) {
this.mWSDL = wsdl;
this.mBinding = binding;
}
/**
* normalize the binding protocol specific concrete message to jbi wrapper.
* @param operation wsdl operation for which a concrete message should be normalized.
* @param normMsg NoramalizedMessage which will be configurate with normalized data from
* the concrete message
* @param msgSource concrete mssage of a particular binding protocol.
*/
public abstract void normalizeInput(Operation operation, NormalizedMessage normMsg, DOMSource msgSource)
throws MessagingException;
/**
* normalize the binding protocol specific concrete message to jbi wrapper.
* @param operation wsdl operation for which a concrete message should be normalized.
* @param normMsg NoramalizedMessage which will be configurate with normalized data from
* the concrete message
* @param msgSource concrete message of a particular binding protocol.
*/
public abstract void normalizeOutput(Operation operation, NormalizedMessage normMsg, DOMSource msgSource)
throws MessagingException;
/**
* normalize the binding protocol specific concrete message to jbi wrapper.
* @param operation wsdl operation for which a concrete message should be normalized.
* @param normMsg NoramalizedMessage which will be configurate with normalized data from
* the concrete message
* @param msgSource concrete message of a particular binding protocol.
*/
public abstract void normalizeFault(Operation operation, String faultName, NormalizedMessage normMsg, DOMSource msgSource)
throws MessagingException;
/**
* denormalize the normalized message into a concrete message for a particular binding protocol
* @param operation wsdl operation for which a concrete message should be de-normalized.
* @param normMsg NormalizedMessage which should be used to create de-normalized message.
*/
public abstract DOMSource denormalizeInput(Operation operation, NormalizedMessage normMsg)
throws MessagingException;
/**
* denormalize the normalized message into a concrete message for a particular binding protocol
* @param operation wsdl operation for which a concrete message should be denormalized.
* @param normMsg NormalizedMessage which should be used to create denormalized message.
*/
public abstract DOMSource denormalizeOutput(Operation operation, NormalizedMessage normMsg)
throws MessagingException;
/**
* denormalized the normalized fault message into a concrete message for a particular binding protocol
* @param operation wsdl operation for which a concrete message should be denormalized.
* @param normMsg NormalizedMessage which should be used to create denormalized message.
*/
public abstract DOMSource denormalizeFault(Operation operation, String faultName, NormalizedMessage normMsg)
throws MessagingException;
/**
* @return the wsdl definition to use in normalizing and denormalizing the message
*/
protected Definition getWSDL() {
return this.mWSDL;
}
/**
* @return the wsdl binding definition to use in normalizing and denormalizing the message
*/
protected Binding getBinding() {
return this.mBinding;
}
/**
* create and add message parts to the jbiWrapper according to the abstract message model. This
* method assumes that the each element in the msgParts list passed to it is mapped to the part
* of the abstract wsdl message and uses the type or element attribute of the abstract message to
* determine whether the element is actual part element or a wrapped part type.
* Use this method in normalizing the concrete protocol specific message to jbi wrapper message.
* @param jbiWrapper object that holds the jbi wrapper information.
* @param wsdlMsg abstract message from the wsdl definition
* @param msgParts actual message parts from the concrete message
*/
protected void addMessagePartsToJBIWrapper(WSDL11JBIWrapper jbiWrapper, Message wsdlMsg, List<Element> msgParts) throws MessagingException {
List wsdlParts = wsdlMsg.getOrderedParts(null);
for ( int i=0; i < wsdlParts.size(); ++i ) {
Part wsdlPart = (Part) wsdlParts.get(i);
if ( i >= msgParts.size() ) {
throw new MessagingException("missing message content for part " + wsdlPart.getName());
}
Element msgPart = msgParts.get(i);
if ( wsdlPart.getElementName() != null ) {
jbiWrapper.appendPart(msgPart);
} else {
// it is type.
// check the element name is same as part
if ( !wsdlPart.getName().equals(msgPart.getLocalName()) ) {
throw new MessagingException("mismatched message content for part " + wsdlPart.getName());
}
if ( !wsdlMsg.getQName().getNamespaceURI().equals(msgPart.getNamespaceURI()) ) {
throw new MessagingException("mismatched message content namespace for part " + wsdlPart.getName());
}
// check the content is text or element.
List<Element> partContent = getChildElements(msgPart);
if ( partContent.size() > 0 ) {
// add content as part elements
jbiWrapper.appendPart(partContent);
} else {
// add the content as text
jbiWrapper.appendPart(msgPart.getTextContent());
}
}
}
}
/**
* extracts the message parts from the jbiWrapper according to the abstract wsdl message
* definition passed to it. Use this method in denormalizing the jbi wrapper message into the
* binding protocol specific concrete message.
* @param jbiWrapper jbi wrapper object that contains message parts and the message type information.
* @param wsdlMsg abstract wsdl message definition to use in constructing the part elements.
*/
protected List<Element> getMessagePartsFromJBIWrapper(WSDL11JBIWrapper jbiWrapper, Message wsdlMsg)
throws MessagingException, ParserConfigurationException {
List<Element> msgParts = new ArrayList<Element>();
int jbiPartCount = jbiWrapper.getPartCount();
List wsdlParts = wsdlMsg.getOrderedParts(null);
QName msgType = jbiWrapper.getType();
if (!wsdlMsg.getQName().getNamespaceURI().equals(msgType.getNamespaceURI())) {
throw new MessagingException("Namespace mismatch between jbi wrapper message type and wsdl message");
}
Document newDoc = jbiWrapper.getDocumentBuilder().newDocument();
for ( int i=0; i < wsdlParts.size(); ++i ) {
Part wsdlPart = (Part) wsdlParts.get(i);
if ( i >= jbiPartCount ) {
throw new MessagingException("missing message content for part " + wsdlPart.getName());
}
if ( wsdlPart.getElementName() != null ) {
msgParts.add(jbiWrapper.getPartAsElement(i));
} else {
// it is type. create a new element for a typed part
// check the element name is same as part
String prefix = msgType.getPrefix();
String nsURI = msgType.getNamespaceURI();
String localName = wsdlPart.getName();
Element partEl = newDoc.createElementNS(nsURI, prefix + ":" + localName);
partEl.setAttributeNS(XMLNS_NS, "xmlns:"+prefix, nsURI);
NodeList partContent = jbiWrapper.getPart(i);
appendChildren(partEl, partContent, newDoc, true);
msgParts.add(partEl);
}
}
return msgParts;
}
/**
* utility method that can append the nodeList passed to it to the element children.
* @param el element node to which the nodeList should be appended
* @param doc the document object that should be used to import the nodeList
* @param importNode true if the nodeList should be imported while appending the nodeList to the
* element children. false if no import is necessary.
*/
protected void appendChildren(Element el, NodeList nodeList, Document doc, boolean importNode) {
for ( int pIdx = 0; pIdx < nodeList.getLength(); ++pIdx) {
Node node = nodeList.item(pIdx);
if ( importNode ) {
node = doc.importNode(node, true);
}
el.appendChild(node);
}
}
/**
* @param el element from which to extract the child elements
* @return List<Element> list of child Element nodes.
*/
protected List<Element> getChildElements(Element el) {
List<Element> list = new ArrayList<Element>();
NodeList nodeList = el.getChildNodes();
for ( int i=0; i < nodeList.getLength(); ++i) {
Node node = nodeList.item(i);
if (!(node instanceof Element) ){
continue;
}
list.add((Element)node);
}
return list;
}
}

View File

@ -0,0 +1,99 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* SEBindingExt.java
*/
package net.openesb.component.${componentName}.common.wsdl;
import java.io.PrintWriter;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation classes implement wsdl 1.1 extension model for the
* jbi service engine binding that is defined in jsr 208(sec. 5.5.6.1). to read/write concrete binding
* element in the wsdl definition for the service endpoint binding provided by the service engine.
* The wsdl definition with this binding information can be used in providing the service provider
* metadata returned by the service engine in <code>Component.getServiceDescription</code>.
* <p>
* <code>AbstractExtensionRegistry</code> by default include this extension serializers in the
* registry to read/write this service engine binding type in the wsdl definition.
* <p>
* During a service unit deployment/initialization in the service engine, the deployed wsdl definition
* is loaded and modified to provide this binding for the service provided by the engine.
*
* @see WSDLProcessor${symbol_pound}createServiceEngineBinding
* @see AbstractExtensionRegistry
* @see com.sun.jbi.sample.component.common.deployment.ServiceUnit${symbol_pound}loadServiceDefinitions
* @author chikkala
*/
public interface SEBindingExt extends ExtensibilityElement, java.io.Serializable {
public static final String NS_URI = "http://java.sun.com/xml/ns/jbi/binding/service+engine";
public static final String NS_DEF_PREFIX = "jbise";
/** Element names. */
public static final String EL_BINDING_EXT = "binding";
/**Qualified element names.*/
public static final QName QN_BINDING_EXT = new QName(NS_URI, EL_BINDING_EXT);
public static class SEBindingExtImpl extends AbstractExtensibilityElement implements SEBindingExt {
public SEBindingExtImpl() {
setElementType(QN_BINDING_EXT);
}
@Override
public String toString() {
StringBuffer buff = new StringBuffer();
buff.append("<"+NS_DEF_PREFIX+":"+EL_BINDING_EXT);
buff.append("/>");
return buff.toString();
}
/**
* creates and adds the jbi service engine binding extensibility element to the wsdl definition
* under specified binding definition.
*/
public static SEBindingExtImpl addExtensibilityElement(Definition wsdlDef, Binding binding) {
SEBindingExtImpl bindingExt = new SEBindingExt.SEBindingExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, binding, bindingExt, SEBindingExt.NS_DEF_PREFIX);
return bindingExt;
}
}
/**
* serializer and descrializer implementation for the binding extension element.
*/
public static class SEBindingExtSerializer extends AbstractExtensionSerializer {
public SEBindingExtSerializer() {
super(Binding.class, QN_BINDING_EXT, SEBindingExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
SEBindingExt extObj = (SEBindingExt)extReg.createExtension(parentType, elementType);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg ) throws WSDLException {
String elName = getQualifiedName(def, NS_URI, EL_BINDING_EXT);
SEBindingExt extObj = (SEBindingExt)extension;
StringBuffer buff = new StringBuffer();
buff.append("<" + elName );
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,471 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* WSDL11JBIWrapper.java
*
*/
package net.openesb.component.${componentName}.common.wsdl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import javax.wsdl.Fault;
import javax.wsdl.Input;
import javax.wsdl.Message;
import javax.wsdl.Operation;
import javax.wsdl.Output;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
/**
* This class wraps the wsdl11 messages to the jbi wrapper message suitable for
* processing in the wsdl2.0 model of the normalized message in jbi as defined in jsr208 like
* <jbi:message version="1.0"
* type="qname of message attribute from wsdl:input, wsdl:output or wsdl:fault"
* name="optional name attribute from wsdl:input, wsdl:output or wsdl:fault"
* xmlns:jbi="http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper">
* <jbi:part>
* <message-elements/>
* </jbi:part>
* <jbi:part>
* <message-elements/>
* </jbi:part>
* </jbi:message>
*
*
* @author chikkala
*/
public class WSDL11JBIWrapper {
public static final String XMLNS_NS = "http://www.w3.org/2000/xmlns/";
public static final String WRAPPER_NAMESPACE = "http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper";
public static final String DEF_NS_PREFIX = "jbiwrp";
public static final String DEF_MESSAGE_NS_PREFIX = "msgns";
public static final String JBI_MESSAGE_EL = "message";
public static final String JBI_PART_EL = "part";
public static final String VERSION_ATTR = "version";
public static final String VERSION_ATTR_VALUE = "1.0";
public static final String TYPE_ATTR = "type";
public static final String NAME_ATTR = "name";
private static DocumentBuilder sDocBuilder = null;
/** qname of message attribute from wsdl:input, wsdl:output or wsdl:fault */
private QName mType;
/** optional name attribute from wsdl:input, wsdl:output or wsdl:fault */
private String mName;
/** each parts contents as node list */
List<NodeList> mPartConentList = new ArrayList<NodeList>();
/** Creates a new instance of WSDL11JBIWrapper */
public WSDL11JBIWrapper() {
}
/** creates the namespace aware document builder. extended classes can override this method
* to return the doc builder created else where.
*/
protected DocumentBuilder createDocumentBuilder() throws ParserConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
return factory.newDocumentBuilder();
}
/** return the document builder
* @return DocumentBuilder
*/
public final DocumentBuilder getDocumentBuilder() throws ParserConfigurationException {
if ( WSDL11JBIWrapper.sDocBuilder == null ) {
WSDL11JBIWrapper.sDocBuilder = createDocumentBuilder();
}
return WSDL11JBIWrapper.sDocBuilder;
}
/**
* @return type qname of message attribute from wsdl:input, wsdl:output or wsdl:fault
*/
public QName getType() {
return this.mType;
}
/**
* @param type qname of message attribute from wsdl:input, wsdl:output or wsdl:fault
*/
public void setType(QName type) {
this.mType = type;
}
/** @return name attribute from wsdl:input, wsdl:output or wsdl:fault. or null if not set. */
public String getName() {
return this.mName;
}
/**
* @param name optional name attribute from wsdl:input, wsdl:output or wsdl:fault. can be null.
*/
public void setName(String name) {
this.mName = name;
}
/**
* appends part content as node list
*/
public void appendPart(NodeList partContent) {
this.mPartConentList.add(partContent);
}
/**
* append part content from the List of nodes
*/
public void appendPart(List<? extends Node> partContent) {
this.mPartConentList.add(new NodeListImpl(partContent));
}
/**
* append part content as element
*/
public void appendPart(Element partContent) {
this.mPartConentList.add(new NodeListImpl(partContent));
}
/**
* append part content from DOMSource
*/
public void appendPart(DOMSource partContent) {
Element partConentEl = getElement(partContent.getNode());
this.mPartConentList.add(new NodeListImpl(partConentEl));
}
/**
* append part content as text node.
*/
public void appendPart(String partContent) {
Text textContent = null;
try {
textContent = this.getDocumentBuilder().newDocument().createTextNode(partContent);
} catch (ParserConfigurationException ex) {
ex.printStackTrace();
}
if ( textContent != null ) {
this.mPartConentList.add(new NodeListImpl(textContent));
}
}
/**
* append list of part contents each is a NodeList to the parts
*/
public void appendParts(List<NodeList> partContentList) {
this.mPartConentList.addAll(partContentList);
}
/**
* returned the ordered list of part contents.
*/
public List<NodeList> getParts() {
return Collections.unmodifiableList(this.mPartConentList);
}
/**
* return the number of parts
*/
public int getPartCount() {
return this.mPartConentList.size();
}
/**
* return the part content at a particular index as NodeList.
*/
public NodeList getPart(int idx) {
return this.mPartConentList.get(idx);
}
/**
* return part context at a particular index as text
*/
public String getPartAsText(int idx) {
NodeList partNodes = getPart(idx);
Document doc;
try {
doc = this.getDocumentBuilder().newDocument();
Element el = doc.createElementNS(WRAPPER_NAMESPACE, DEF_NS_PREFIX + ":" + JBI_PART_EL);
for ( int i=0; i < partNodes.getLength(); ++i) {
el.appendChild(partNodes.item(i));
}
return el.getTextContent();
} catch (ParserConfigurationException ex) {
return null;
}
}
/**
* return part context at a particular index as Element
*/
public Element getPartAsElement(int idx) {
Element contentEl = null;
NodeList partNodes = getPart(idx);
for ( int i=0; i < partNodes.getLength(); ++i) {
Node node = partNodes.item(i);
if ( node instanceof Element) {
contentEl = (Element)node;
break;
}
}
return contentEl;
}
/**
* creates Document from this wrapper object. Before calling this method,
* the type, name (optional) and parts contents should be set.
* @return Document containing the wsdl 11 wrapper xml
*/
public Document toDocument() throws ParserConfigurationException {
Document wrapperDoc = getDocumentBuilder().newDocument();
Element jbiMessage = wrapperDoc.createElementNS(WRAPPER_NAMESPACE, DEF_NS_PREFIX + ":" + JBI_MESSAGE_EL);
jbiMessage.setAttribute(VERSION_ATTR, VERSION_ATTR_VALUE);
wrapperDoc.appendChild(jbiMessage);
QName type = this.getType();
if ( type == null ) {
type = new QName("", "", DEF_MESSAGE_NS_PREFIX);
}
// set the jbiMessage attributes
String prefix = type.getPrefix();
if (prefix == null || prefix.length() == 0) {
prefix = DEF_MESSAGE_NS_PREFIX;
}
jbiMessage.setAttribute(TYPE_ATTR, prefix + ":" + type.getLocalPart());
jbiMessage.setAttributeNS( XMLNS_NS, "xmlns:" + prefix, type.getNamespaceURI());
String name = this.getName();
if (name != null && name.trim().length() > 0 ) {
jbiMessage.setAttribute(NAME_ATTR, name);
}
List<NodeList> partContentList = this.getParts();
for ( NodeList nodeList : partContentList ) {
// set jbi part message
Element jbiPart = wrapperDoc.createElementNS(WRAPPER_NAMESPACE, DEF_NS_PREFIX + ":" + JBI_PART_EL);
jbiMessage.appendChild(jbiPart);
for ( int i =0; i < nodeList.getLength(); ++i ) {
Node importedMsgNode = wrapperDoc.importNode(nodeList.item(i), true);
jbiPart.appendChild(importedMsgNode);
}
}
return wrapperDoc;
}
/**
* creates DOMSource from this wrapper object. Before calling this method,
* the type, name (optional) and parts contents should be set.
* @return DOMSource containing the wsdl 11 wrapper xml
*/
public DOMSource toDOMSource() throws ParserConfigurationException {
DOMSource wrappedSource = new DOMSource();
wrappedSource.setNode(toDocument());
return wrappedSource;
}
/**
* return Element node from a document node or non document. Use to extract
* the message root element.
* @root node from which the Element node will be extracted.
* @return Element node.
*/
public static Element getElement(Node root) {
Element msgEl = null;
if ( root instanceof Document) {
msgEl = ((Document)root).getDocumentElement();
} else if (root instanceof Element) {
msgEl = (Element)root;
} else {
NodeList nodeList = root.getChildNodes();
for ( int i=0; i < nodeList.getLength(); ++i) {
Node node = nodeList.item(i);
if ( node instanceof Element ) {
msgEl = (Element) node;
break;
}
}
}
return msgEl;
}
/**
* creates wrapper object from the DOMSource that has wsdl 11 wrapper xml.
* @param wrappedMsg wsdl 11 wrapper xml as DOMSource
* @return WSDL11JBIWrapper representing the wrapper xml.
*/
public static WSDL11JBIWrapper sourceToWrapper(DOMSource wrappedMsg) {
Element jbiMessage = getElement(wrappedMsg.getNode());
if ( jbiMessage == null ) {
return null;
}
String nsURI = jbiMessage.getNamespaceURI();
String tagName = jbiMessage.getLocalName();
if (!WRAPPER_NAMESPACE.equals(nsURI) || !JBI_MESSAGE_EL.equals(tagName)) {
return null;
}
String name = jbiMessage.getAttribute(NAME_ATTR);
String typeQN = jbiMessage.getAttribute(TYPE_ATTR);
String typePrefix = "";
String typeName = "";
if ( typeQN != null && typeQN.trim().length() > 0 ) {
int idx = typeQN.indexOf(':');
if ( idx >= 0 ) {
typePrefix = typeQN.substring(0, idx);
if ( typeQN.length() > idx ) {
typeName = typeQN.substring(idx+1);
}
} else {
typePrefix = "";
typeName = typeQN;
}
}
String typeURI = jbiMessage.getAttribute("xmlns:" + typePrefix);
QName typeQName = new QName(typeURI, typeName, typePrefix);
WSDL11JBIWrapper wrapper = new WSDL11JBIWrapper();
wrapper.setName(name);
wrapper.setType(typeQName);
NodeList jbiPartList = jbiMessage.getElementsByTagNameNS(WRAPPER_NAMESPACE, JBI_PART_EL);
for ( int i=0; i < jbiPartList.getLength(); ++i) {
Node jbiPart = jbiPartList.item(i);
wrapper.appendPart(jbiPart.getChildNodes());
}
return wrapper;
}
/**
* creates the WSDL11JBIWrapper object and sets the type and name of the object
* @param type qname of message attribute from wsdl:input, wsdl:output or wsdl:fault
* @param name optional name attribute from wsdl:input, wsdl:output or wsdl:fault
* @return the jbi message wrapper object
*/
public static WSDL11JBIWrapper createWrapper(QName type, String name ) throws ParserConfigurationException {
WSDL11JBIWrapper wrapper = new WSDL11JBIWrapper();
wrapper.setName(name);
wrapper.setType(type);
return wrapper;
}
/**
* creates the WSDL11JBIWrapper object. useful when the message has one part and the
* part content has multiple child element.
* @param type qname of message attribute from wsdl:input, wsdl:output or wsdl:fault
* @param name optional name attribute from wsdl:input, wsdl:output or wsdl:fault
* @param partContent part content as node list
* @return the jbi message wrapper object
*/
public static WSDL11JBIWrapper createWrapper(QName type, String name, NodeList partContent) throws ParserConfigurationException {
WSDL11JBIWrapper wrapper = createWrapper(type, name);
wrapper.appendPart(partContent);
return wrapper;
}
/**
* creates the WSDL11JBIWrapper object. useful when the message has one part and the
* part content is a single element
* @param type qname of message attribute from wsdl:input, wsdl:output or wsdl:fault
* @param name optional name attribute from wsdl:input, wsdl:output or wsdl:fault
* @param partContent part content as node list
* @return the jbi message wrapper object
*/
public static WSDL11JBIWrapper createWrapper(QName type, String name, Element msgEl) throws ParserConfigurationException {
WSDL11JBIWrapper wrapper = createWrapper(type, name, new WSDL11JBIWrapper.NodeListImpl(msgEl));
return wrapper;
}
public static WSDL11JBIWrapper createWrapper(QName type, String name, DOMSource inputSource) throws ParserConfigurationException {
WSDL11JBIWrapper wrapper = createWrapper(type, name);
Node msgNode = getElement(inputSource.getNode());
NodeList nodeList = new WSDL11JBIWrapper.NodeListImpl(msgNode);
wrapper.appendPart(nodeList);
return wrapper;
}
/**
* creates the wrapped message using the wsdl4j operations input element for type and name.
* @param msg DOMSource for the unwrapped message
* @param operation wsdl4j operation object representing the operation of the PortType
* @return DOMSource wrapped message as DOMSource
*/
public static WSDL11JBIWrapper createInputWrapper(Operation operation) throws ParserConfigurationException {
QName type = null;
String name = null;
Input input = operation.getInput();
if ( input == null ) {
return null;
}
name = input.getName();
Message wsdlMsg = input.getMessage();
type = wsdlMsg.getQName();
WSDL11JBIWrapper wrapper = createWrapper(type, name);
return wrapper;
}
/**
* creates the wrapped message using the wsdl4j operations output element for type and name.
* @param msg DOMSource for the unwrapped message
* @param operation wsdl4j operation object representing the operation of the PortType
* @return DOMSource wrapped message as DOMSource
*/
public static WSDL11JBIWrapper createOutputWrapper(Operation operation) throws ParserConfigurationException {
QName type = null;
String name = null;
Output output = operation.getOutput();
if ( output == null) {
return null;
}
name = output.getName();
Message wsdlMsg = output.getMessage();
type = wsdlMsg.getQName();
WSDL11JBIWrapper wrapper = createWrapper(type, name);
return wrapper;
}
/**
* creates the wrapped message using the wsdl4j operations output element for type and name.
* @param msg DOMSource for the unwrapped message
* @param operation wsdl4j operation object representing the operation of the PortType
* @param faultName fault name, can be null to look for the fault with no name.
* @return DOMSource wrapped message as DOMSource
*/
public static WSDL11JBIWrapper createFaultWrapper(Operation operation, String faultName) throws ParserConfigurationException {
QName type = null;
String name = null;
@SuppressWarnings("unchecked")
Map<String, Fault> faultMap = operation.getFaults();
Fault fault = faultMap.get(faultName);
if ( fault == null ) {
return null;
}
name = fault.getName();
Message wsdlMsg = fault.getMessage();
type = wsdlMsg.getQName();
WSDL11JBIWrapper wrapper = createWrapper(type, name);
return wrapper;
}
/**
* NodeList implementation.
*/
public static class NodeListImpl extends ArrayList<Node> implements NodeList {
public NodeListImpl() {
super();
}
public NodeListImpl(Node aNode) {
super();
if (aNode != null) {
this.add(aNode);
}
}
public NodeListImpl(List<? extends Node> nodes) {
if (nodes != null) {
this.addAll(nodes);
}
}
public int getLength() {
return this.size();
}
public Node item(int idx) {
return this.get(idx);
}
}
}

View File

@ -0,0 +1,419 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* WSDLProcessor.java
*/
package net.openesb.component.${componentName}.common.wsdl;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.Operation;
import javax.wsdl.Port;
import javax.wsdl.PortType;
import javax.wsdl.Service;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ElementExtensible;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.wsdl.xml.WSDLWriter;
import javax.xml.namespace.QName;
/**
* This class is used to configure jwsdl(wsdl4j) to read and process wsdl documents with wsdl extensions.
* It provides set of helper methods to read and process the wsdl definitions from files with .wsdl
* extension from a specified directory.
* <p>
* A Binding Component that is processing the wsdl extensions for its deployment configuration would
* extend this class and provide the required ExtensionRegistry that will have the extension serializers
* and deserializers configured to read/write the extensions from/to the java model.
* <p>
* A Service Engine that is processing the wsdl during deployment can directly use this class
* to process the wsdl as the default implementation returned by this class configures the wsdl extension
* registry to read/write the service engine binding extensions.
*
* @see AbstractExtensionRegistry
* @see SEBindingExt
* @author chikkala
*/
public class WSDLProcessor {
private String mXmlCatalogPath = "xml-catalog.xml";
private String mWsdlDirPath = "";
private WSDLReader mReader;
/** Creates a new instance of WSDLProcessor
*/
public WSDLProcessor(String wsdlDir) {
this(wsdlDir, null);
}
/** Creates a new instance of WSDLProcessor
*/
public WSDLProcessor(String wsdlDir, String xmlCatPath) {
if ( wsdlDir != null ) {
this.mWsdlDirPath = wsdlDir;
}
if ( xmlCatPath != null ) {
this.mXmlCatalogPath = xmlCatPath;
}
}
/** @return directory path from which this class reads the wsdl files with .wsdl as file extension. */
public String getWSDLDirectory() {
return this.mWsdlDirPath;
}
/** path to the xml catalog file in the service unit which can be used for Catalog-based entity
* and URI resolution.
*/
public String getXmlCatelogPath() {
return this.mXmlCatalogPath;
}
/** wsdl extension registry required for processing the wsdl extensions in the wsdl definition to
* java model. Binding component that is processing the wsdl extensions for its deployment
* configuration would provide the required ExtensionRegistry that will have the extension serializers
* and deserializers configured to read/write the extensions from/to the java model.
* @return ExtensionSerializer
* @see AbstractExtensionSerializer
*/
protected ExtensionRegistry getExtensionRegistry() {
return new AbstractExtensionRegistry() {
protected List<AbstractExtensionSerializer> createSerializers() {
return new ArrayList<AbstractExtensionSerializer>();
}
};
}
/**
* @return the WSDLReader configured with extension registry to process the wsdl extensions.
*/
public final WSDLReader getWSDLReader() throws WSDLException {
if ( this.mReader == null ) {
WSDLFactory factory = WSDLFactory.newInstance();
this.mReader = factory.newWSDLReader();
// reader.setFeature("javax.wsdl.verbose", true);
// reader.setFeature("javax.wsdl.importDocuments", true);
this.mReader.setExtensionRegistry(getExtensionRegistry());
}
return this.mReader;
}
/**
* reads the wsdl file and returns the wsdl definition jwsdl model.
* @param wsldFilePath relative path to wsdl file from the the root wsdl directory returns from
* ${symbol_pound}getWSDLDirectory in the service unit or or absolute path .
* @return Definition
*/
public Definition readWSDL(String wsdlFilePath) throws WSDLException {
File wsdlFile = new File(wsdlFilePath);
if ( !wsdlFile.isAbsolute() ) {
wsdlFile = new File(this.mWsdlDirPath, wsdlFilePath);
}
return getWSDLReader().readWSDL(wsdlFile.getAbsolutePath());
}
/**
* reads the files with .wsdl file extension in a directory. If the directory should
* be searched recursively, it searches this directory, all child directories of this
* directory and then to their child directories recursively.
* @param dir directory file to search for .wsdl files
* @param rec if set to true, it recursively searches the directory. if set to false, only
* this directory is searched.
* @return List of Files with .wsdl extension.
*/
public List<File> listWSDLFiles(File dir, final boolean rec) throws IOException {
if ( dir == null || !dir.isDirectory()) {
throw new IOException(dir + " is not a directory for looking up wsdl files");
}
List<File> wsdlList = new ArrayList<File>();
File[] files = dir.listFiles(new FileFilter() {
public boolean accept(File pathname) {
if ( rec && pathname.isDirectory()) {
return true;
} else {
String name = pathname.getName();
int idx = name.lastIndexOf('.');
if ( idx < 0 ) {
return false;
}
String ext = name.substring(idx);
return ".wsdl".equalsIgnoreCase(ext);
}
}
});
for ( File file : files ) {
if ( rec && file.isDirectory()) {
List<File> wsdlFiles = listWSDLFiles(file, rec);
wsdlList.addAll(wsdlFiles);
} else {
wsdlList.add(file);
}
}
return wsdlList;
}
/**
* reads the files with .wsdl file extension in a directory fromDir and return the list of
* wsdl definitions corresponding to them.
* @param fromDir path to the directory relative to the root wsdl directory returns from
* ${symbol_pound}getWSDLDirectory or the absolute path to the directory.
*/
public List<Definition> readWSDLs(String fromDir) throws WSDLException {
if ( fromDir == null ) { fromDir = ""; }
File wsdlDir = new File(fromDir);
if (!wsdlDir.isAbsolute()) {
wsdlDir = new File(this.mWsdlDirPath, fromDir);
}
List<File> wsdlFiles = new ArrayList<File>();
try {
wsdlFiles = listWSDLFiles(wsdlDir, true);
} catch (IOException ioEx) {
throw new WSDLException("WSDLFileReadError", ioEx.getMessage(),ioEx);
}
List<String> wsdlPaths = new ArrayList<String>();
for ( File wsdlFile : wsdlFiles) {
wsdlPaths.add(wsdlFile.getAbsolutePath());
}
Collections.sort(wsdlPaths);
List<Definition> wsdlList = new ArrayList<Definition>();
for ( String wsdlPath : wsdlPaths ) {
Definition wsdlDef = readWSDL(wsdlPath);
wsdlList.add(wsdlDef);
}
return wsdlList;
}
/**
* finds PortType using port type ( interface ) qname.
*/
public static PortType findInterface(Definition wsdlDef, QName interfaceName) {
return wsdlDef.getPortType(interfaceName);
}
/** finds the Service using service qname */
public static Service findService(Definition wsdlDef, QName serviceName) {
return wsdlDef.getService(serviceName);
}
/** finds the wsdl port using service qname and endpoint name */
public static Port findServiceEndpoint(Definition wsdlDef, QName serviceName, String endpointName) {
Service service = null;
Port port = null;
service = findService(wsdlDef, serviceName);
if ( service != null ) {
port = service.getPort(endpointName);
}
return port;
}
/**
* finds the binding definition to which the service with serviceName and endpointName was bound.
*/
public static Binding findServiceBinding(Definition wsdlDef, QName serviceName, String endpointName) {
Binding binding = null;
Port port = findServiceEndpoint(wsdlDef, serviceName, endpointName);
if ( port != null ) {
binding = port.getBinding();
}
return binding;
}
/**
* finds the binding definition using the interface(portType) qname with a
*/
public static Binding findInterfaceBinding(Definition wsdlDef,
QName interfaceQName, QName extQName) {
Map bindingMap = wsdlDef.getBindings();
@SuppressWarnings("unchecked")
Collection<Binding> bindings = bindingMap.values();
for ( Binding binding : bindings ) {
if ( binding.getPortType().getQName().equals(interfaceQName)) {
return binding;
}
}
return null;
}
/**
* find the wsdl4j operation corresponds to the interface+operation.
* @param wsdlDef wsdl definition
* @param portTypeQName portType QName
* @param opName operation name. if null, first operation in the portType
* is returned.
* @return Operation corresponding to the portType+opName
*/
public static Operation findOperation(Definition wsdlDef,
QName portTypeQName, String opName) {
Operation operation = null;
PortType portType = wsdlDef.getPortType(portTypeQName);
if ( portType != null ) {
if ( opName != null ) {
operation = portType.getOperation(opName, null, null);
} else {
@SuppressWarnings("unchecked")
List<Operation> list = portType.getOperations();
if ( list != null && list.size() > 0 ) {
operation = list.get(0);
}
}
}
return operation;
}
/**
* verifies whether the wsdl definition contains the specified service descriptions or not. Used
* to locate the wsdl definition for the services describes in service unit deployment
* descriptor(jbi.xm).
* @param interfaceName portType qname to find in the definition. can be null if you are trying to
* find only service endpoint description.
* @param serviceName qname for the service to find in this wsdl. can be null if
* you are trying to find only portType (abstract service) description.
* @param endpointName port name to find in the service definition. null if only
* service with any port should be looked up.
*
* @return true if the wsdl definition contains the specified service description.
*/
public static boolean isWSDLFor(Definition wsdlDef,
QName interfaceName, QName serviceName, String endpointName) {
PortType portType = null;
Service service = null;
Port port = null;
if ( interfaceName != null ) {
portType = findInterface(wsdlDef, interfaceName);
}
if ( serviceName != null ) {
service = findService(wsdlDef, serviceName);
}
if ( endpointName != null && service != null ) {
port = service.getPort(endpointName);
}
boolean isWSDL = true;
if ( (interfaceName != null && portType == null) ||
( serviceName != null && service == null ) ||
( endpointName != null && (service == null || port == null)) ) {
isWSDL = false;
}
return isWSDL;
}
/**
* creates a binding definition that contains a service engine binding elements in the specified
* wsdl definition for a portType. It will try to find/create the binding element with interface
* local name with a "_JBISEBinding" suffix and add service engine binding element to it if it
* is not present.
* @param wsdl wsdl definition
* @param interfaceName portType qname to which the binding is created.
* @return a Binding contains service engine binding that is created for the portType.
*/
public Binding createServiceEngineBinding(Definition wsdl, QName interfaceName) {
QName bindingQName = new QName(wsdl.getQName().getNamespaceURI(),
interfaceName.getLocalPart() + "_JBISEBinding");
Binding binding = wsdl.getBinding(bindingQName);
if ( binding == null ) {
binding = wsdl.createBinding();
binding.setQName(bindingQName);
binding.setPortType(wsdl.getPortType(interfaceName));
binding.setUndefined(false);
ExtensibilityElement bindingExt =
SEBindingExt.SEBindingExtImpl.addExtensibilityElement(wsdl, binding);
wsdl.addBinding(binding);
}
return binding;
}
/**
* creates port and binding elements that provide the the service engine binding for a service.
* @param wsdl wsdl definition
* @param interfaceName portType qname to which the binding is created.
* @param serviceName service under which the port definition bound to the service engine binding
* should be created.
* @param endpointName port name.
* @return a Binding contains service engine binding that is created for the portType.
*/
public Binding createServiceEngineBinding(Definition wsdl, QName interfaceName, QName serviceName, String endpointName ) {
Binding binding = null;
Service service = findService(wsdl, serviceName);
if ( service == null ) {
return null;
}
Port port = service.getPort(endpointName);
if ( port != null ) {
binding = port.getBinding();
} else {
// create port
port = wsdl.createPort();
port.setName(endpointName);
binding = createServiceEngineBinding(wsdl, interfaceName);
port.setBinding(binding);
service.addPort(port);
}
return binding;
}
/** prints the wsdl to text from the wsdl definition */
public static void printWSDL(PrintWriter out, Definition def) {
try {
WSDLFactory factory = WSDLFactory.newInstance();
WSDLWriter wsdlWriter = factory.newWSDLWriter();
wsdlWriter.writeWSDL(def, out);
} catch (WSDLException ex) {
ex.printStackTrace(out);
}
}
/** prints the wsdl to text from the wsdl definition */
public static String printWSDLToString(Definition def) {
StringWriter writer = new StringWriter();
PrintWriter out = new PrintWriter(writer);
printWSDL(out, def);
out.close();
return writer.getBuffer().toString();
}
/** returns an existing namespace prefix or create one if not exists for the corresponding namespaceURI */
public static String getNamespacePrefix(Definition def, String namespaceURI, String defPrefix) {
String prefix = null;
prefix = def.getPrefix(namespaceURI);
if ( prefix == null ) {
Set keySet = def.getNamespaces().keySet();
String newPrefix = "ns";
if ( defPrefix != null && defPrefix.trim().length() > 0 ){
newPrefix = defPrefix;
}
prefix = newPrefix;
for ( int i=0; i < Integer.MAX_VALUE; ++i) {
if (!keySet.contains(prefix)) {
break;
} else {
prefix = newPrefix + i;
}
}
}
return prefix;
}
/**
* creates and adds the jbi service engine binding extensibility element to the wsdl definition
* under specified binding definition.
*/
public static void addExtensibilityElement(Definition wsdlDef,
ElementExtensible extensibleEl, ExtensibilityElement extEl, String defPrefix) {
QName elementType = extEl.getElementType();
String namespaceURI = elementType.getNamespaceURI();
String prefix = wsdlDef.getPrefix(namespaceURI);
if ( prefix == null ) {
// no namespace prefix defined. create one.
prefix = WSDLProcessor.getNamespacePrefix(wsdlDef, namespaceURI, defPrefix);
wsdlDef.addNamespace(prefix, namespaceURI);
}
extensibleEl.addExtensibilityElement(extEl);
}
}

View File

@ -0,0 +1,101 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* BindingExt.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensibilityElement;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.PrintWriter;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* extension element. The inner classes BindingExtImpl implements the interface
* and the BindingExtSerializer provides the serializer and deserializer
* implementation. The implementation and serializer classes will be registered
* with the ExtensionRegistry to process the binding extension element in the
* wsdl definition.
*
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensibilityElement
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionSerializer
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
* @author chikkala
*/
public interface BindingExt extends ExtConstants, ExtensibilityElement, java.io.Serializable {
//TODO: define get/set methods for properties for BindingExt if the extension element has attributes.
/**
* This class is an implementation of BindingExt interface that provides
* java model for binding extensibility element.
*/
public static class BindingExtImpl extends AbstractExtensibilityElement implements BindingExt {
public BindingExtImpl() {
setElementType(QN_BINDING_EXT);
}
/**
* creates and adds the binding extensibility element to the wsdl
* definition
*/
public static BindingExtImpl addExtensibilityElement(Definition wsdlDef, Binding binding) {
BindingExtImpl bindingExt = new BindingExt.BindingExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, binding, bindingExt, NS_DEF_PREFIX);
return bindingExt;
}
}
/**
* This class provides the serializer and deserializer implementation for
* binding extensibility element.
*/
public static class BindingExtSerializer extends AbstractExtensionSerializer implements ExtConstants {
public BindingExtSerializer() {
super(Binding.class, QN_BINDING_EXT, BindingExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
BindingExt extObj = (BindingExt) extReg.createExtension(parentType, elementType);
//TODO: set any attributes from the el to extension object
// String myAttr = el.getAttribute(ATTR_MY_ATTR);
// extObj.setMyAttr(myAttr);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg) throws WSDLException {
BindingExt extObj = (BindingExt) extension;
StringBuffer buff = new StringBuffer();
String elName = getQualifiedName(def, NS_URI, EL_BINDING_EXT);
buff.append("<" + elName);
//TODO: append any attributes from extension obj to the element
// String myAttr = extObj.getMyAttr();
// if ( myAttr != null && myAttr.trim().length() > 0 ) {
// buff.append(" myAttr=${symbol_escape}"" + myAttr + "${symbol_escape}"");
// }
//
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,52 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* ExtConstants.java
*
*/
package net.openesb.component.${componentName}.wsdlext;
import javax.xml.namespace.QName;
/**
* This interface defines the constants for the namespace, elements, attributes
* and qnames corresponding to the wsdl extensions that this component
* processes. These constants will be used in the wsdl extension model used to
* process a particular wsdl extensions.
*
* @see WSDLExtensionRegistry
* @see PortExt
* @see BindingExt
* @author chikkala
*/
public interface ExtConstants {
public static final String NS_URI_WSDL = "http://schemas.xmlsoap.org/wsdl/";
public static final String NS_URI_XMLNS = "http://www.w3.org/2000/xmlns/";
/**
* wsdl extension namespace processed by this wsdl extension model
*/
public static final String NS_URI = "http://java.sun.com/jbi/wsdl-extensions/sample/jmx-bc/";
public static final String NS_DEF_PREFIX = "jmxbc";
// wsdl extension element names.
public static final String EL_BINDING_EXT = "binding";
public static final String EL_OPERATION_EXT = "operation";
public static final String EL_INPUT_EXT = "input";
public static final String EL_OUTPUT_EXT = "output";
public static final String EL_FAULT_EXT = "fault";
public static final String EL_PORT_EXT = "address";
// Qualified wsdl extension element names.
public static final QName QN_BINDING_EXT = new QName(NS_URI, EL_BINDING_EXT);
public static final QName QN_OPERATION_EXT = new QName(NS_URI, EL_OPERATION_EXT);
public static final QName QN_INPUT_EXT = new QName(NS_URI, EL_INPUT_EXT);
public static final QName QN_OUTPUT_EXT = new QName(NS_URI, EL_OUTPUT_EXT);
public static final QName QN_FAULT_EXT = new QName(NS_URI, EL_FAULT_EXT);
public static final QName QN_PORT_EXT = new QName(NS_URI, EL_PORT_EXT);
// wsdl extension elements attribute names.
public static final String ATTR_ACTION = "action";
public static final String ATTR_SERVICE_URL = "serviceURL";
public static final String ATTR_USERNAME = "username";
public static final String ATTR_PASSWORD = "password";
public static final String ATTR_MBEAN = "mbean";
}

View File

@ -0,0 +1,101 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* FaultExt.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensibilityElement;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.PrintWriter;
import javax.wsdl.BindingFault;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation fault extension element. The inner classes FaultExtImpl implements
* the interface and the FaultExtSerializer provides the serializer and
* deserializer implementation. The implemenation and serializer classes will be
* registered with the ExtensionRegistry to process the binding operation fault
* extension element in the wsdl definition.
*
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensibilityElement
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionSerializer
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
* @author chikkala
*/
public interface FaultExt extends ExtConstants, ExtensibilityElement, java.io.Serializable {
//TODO: define getter methods for properties for FaultExt if the extension element has attributes.
/**
* This class is an implementation of FaultExt interface that provides java
* model for binding operation fault extensibility element.
*/
public static class FaultExtImpl extends AbstractExtensibilityElement implements FaultExt {
public FaultExtImpl() {
setElementType(QN_FAULT_EXT);
}
/**
* creates and adds the binding operation fault extensibility element to
* the wsdl definition
*/
public static FaultExtImpl addExtensibilityElement(Definition wsdlDef, BindingFault fault) {
FaultExtImpl faultExt = new FaultExt.FaultExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, fault, faultExt, NS_DEF_PREFIX);
return faultExt;
}
}
/**
* This class provides the serializer and deserializer implementation for
* binding operation fault extensibility element.
*/
public static class FaultExtSerializer extends AbstractExtensionSerializer implements ExtConstants {
public FaultExtSerializer() {
super(BindingFault.class, QN_FAULT_EXT, FaultExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
FaultExt extObj = (FaultExt) extReg.createExtension(parentType, elementType);
//TODO: set any attributes from the el to extension object
// String myAttr = el.getAttribute(ATTR_MY_ATTR);
// extObj.setMyAttr(myAttr);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg) throws WSDLException {
FaultExt extObj = (FaultExt) extension;
StringBuffer buff = new StringBuffer();
String elName = getQualifiedName(def, NS_URI, EL_FAULT_EXT);
buff.append("<" + elName);
//TODO: append any attributes from extension obj to the element
// String myAttr = extObj.getMyAttr();
// if ( myAttr != null && myAttr.trim().length() > 0 ) {
// buff.append(" myAttr=${symbol_escape}"" + myAttr + "${symbol_escape}"");
// }
//
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,101 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* InputExt.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensibilityElement;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.PrintWriter;
import javax.wsdl.BindingInput;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation input extension element. The inner classes InputExtImpl implements
* the interface and the InputExtSerializer provides the serislizer and
* deserializer implementation. The implementation and serializer classes will
* be registered with the ExtensionRegistry to process the binding operation
* input extension element in the wsdl definition.
*
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensibilityElement
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionSerializer
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
* @author chikkala
*/
public interface InputExt extends ExtConstants, ExtensibilityElement, java.io.Serializable {
//TODO: define get/set methods for properties for InputExt if the extension element has attributes.
/**
* This class is an implementation of InputExt interface that provides java
* model for binding operation input extensibility element.
*/
public static class InputExtImpl extends AbstractExtensibilityElement implements InputExt {
public InputExtImpl() {
setElementType(QN_INPUT_EXT);
}
/**
* creates and adds the binding operation fault extensibility element to
* the wsdl definition
*/
public static InputExtImpl addExtensibilityElement(Definition wsdlDef, BindingInput input) {
InputExtImpl inputExt = new InputExt.InputExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, input, inputExt, NS_DEF_PREFIX);
return inputExt;
}
}
/**
* This class provides the serializer and deserializer implementation for
* binding operation input extensibility element.
*/
public static class InputExtSerializer extends AbstractExtensionSerializer implements ExtConstants {
public InputExtSerializer() {
super(BindingInput.class, QN_INPUT_EXT, InputExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
InputExt extObj = (InputExt) extReg.createExtension(parentType, elementType);
//TODO: set any attributes from the el to extension object
// String myAttr = el.getAttribute(ATTR_MY_ATTR);
// extObj.setMyAttr(myAttr);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg) throws WSDLException {
InputExt extObj = (InputExt) extension;
StringBuffer buff = new StringBuffer();
String elName = getQualifiedName(def, NS_URI, EL_INPUT_EXT);
buff.append("<" + elName);
//TODO: append any attributes from extension obj to the element
// String myAttr = extObj.getMyAttr();
// if ( myAttr != null && myAttr.trim().length() > 0 ) {
// buff.append(" myAttr=${symbol_escape}"" + myAttr + "${symbol_escape}"");
// }
//
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,121 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* OperationExt.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensibilityElement;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.PrintWriter;
import javax.wsdl.BindingOperation;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation extension element. The inner classes OperationImpl implements the
* interface and the OperationExtSerializer provides the serilizer and
* deserializer implementation. The implementation and serializer classes will
* be registered with the ExtensionRegistry to process the binding operation
* extension element in the wsdl definition.
*
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensibilityElement
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionSerializer
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
* @author chikkala
*/
public interface OperationExt extends ExtConstants, ExtensibilityElement, java.io.Serializable {
/**
* Getter for property action.
*
* @return Value of property action.
*/
public String getAction();
/**
* Setter for property action.
*
* @param action New value of property action.
*/
public void setAction(String action);
/**
* This class is an implementation of OperationExt interface that provides
* java model for binding operation extensibility element.
*/
public static class OperationExtImpl extends AbstractExtensibilityElement implements OperationExt {
private String mAction;
public OperationExtImpl() {
setElementType(QN_OPERATION_EXT);
}
public String getAction() {
return this.mAction;
}
public void setAction(String action) {
this.mAction = action;
}
/**
* creates and adds the binding operation fault extensibility element to
* the wsdl definition
*/
public static OperationExtImpl addExtensibilityElement(Definition wsdlDef, BindingOperation operation) {
OperationExtImpl operationExt = new OperationExt.OperationExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, operation, operationExt, NS_DEF_PREFIX);
return operationExt;
}
}
/**
* This class provides the serializer and deserializer implementation for
* binding operation extensibility element.
*/
public static class OperationExtSerializer extends AbstractExtensionSerializer implements ExtConstants {
public OperationExtSerializer() {
super(BindingOperation.class, QN_OPERATION_EXT, OperationExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
OperationExt extObj = (OperationExt) extReg.createExtension(parentType, elementType);
String action = el.getAttribute(ATTR_ACTION);
extObj.setAction(action);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg) throws WSDLException {
OperationExt extObj = (OperationExt) extension;
StringBuffer buff = new StringBuffer();
String elName = getQualifiedName(def, NS_URI, EL_OPERATION_EXT);
buff.append("<" + elName);
String action = extObj.getAction();
if (action != null && action.trim().length() > 0) {
buff.append(" " + ATTR_ACTION + "=${symbol_escape}"" + action + "${symbol_escape}"");
}
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,101 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* OutputExt.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensibilityElement;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.PrintWriter;
import javax.wsdl.BindingOutput;
import javax.wsdl.Definition;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for binding
* operation output extension element. The inner classes OutputExtImpl
* implements the interface and the OutputExtSerializer provides the serilizer
* and deserializer implementation. The implementation and serializer classes
* will be registered with the ExtensionRegistry to process the binding
* operation output extension element in the wsdl definition.
*
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensibilityElement
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionSerializer
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
* @author chikkala
*/
public interface OutputExt extends ExtConstants, ExtensibilityElement, java.io.Serializable {
//TODO: define get/set methods for properties for OutputExt if the extension element has attributes.
/**
* This class is an implementation of OutputExt interface that provides java
* model for binding operation output extensibility element.
*/
public static class OutputExtImpl extends AbstractExtensibilityElement implements OutputExt {
public OutputExtImpl() {
setElementType(QN_OUTPUT_EXT);
}
/**
* creates and adds the binding operation fault extensibility element to
* the wsdl definition
*/
public static OutputExtImpl addExtensibilityElement(Definition wsdlDef, BindingOutput output) {
OutputExtImpl OutputExt = new OutputExt.OutputExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, output, OutputExt, NS_DEF_PREFIX);
return OutputExt;
}
}
/**
* This class provides the serializer and deserializer implementation for
* binding operation output extensibility element.
*/
public static class OutputExtSerializer extends AbstractExtensionSerializer implements ExtConstants {
public OutputExtSerializer() {
super(BindingOutput.class, QN_OUTPUT_EXT, OutputExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
OutputExt extObj = (OutputExt) extReg.createExtension(parentType, elementType);
//TODO: set any attributes from the el to extension object
// String myAttr = el.getAttribute(ATTR_MY_ATTR);
// extObj.setMyAttr(myAttr);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg) throws WSDLException {
OutputExt extObj = (OutputExt) extension;
StringBuffer buff = new StringBuffer();
String elName = getQualifiedName(def, NS_URI, EL_OUTPUT_EXT);
buff.append("<" + elName);
//TODO: append any attributes from extension obj to the element
// String myAttr = extObj.getMyAttr();
// if ( myAttr != null && myAttr.trim().length() > 0 ) {
// buff.append(" myAttr=${symbol_escape}"" + myAttr + "${symbol_escape}"");
// }
//
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,217 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* PortExt.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensibilityElement;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import net.openesb.component.${componentName}.common.wsdl.WSDLProcessor;
import java.io.PrintWriter;
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
import javax.xml.namespace.QName;
import org.w3c.dom.Element;
/**
* This interface and its implementation represents the java model for port
* extension element. The inner classes PortExtImpl implements the interface and
* the PortExtSerializer provides the serializer and deserializer implemenation.
* The implementation and serializer classes will be registered with the
* ExtensionRegistry to process the port extension element in the wsdl
* definition.
*
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensibilityElement
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionSerializer
* @see com.sun.jbi.sample.component.common.wsdl.AbstractExtensionRegistry
* @author chikkala
*/
public interface PortExt extends ExtConstants, ExtensibilityElement, java.io.Serializable {
/**
* Getter for property serviceURL.
*
* @return Value of property serviceURL.
*/
public String getServiceURL();
/**
* Setter for property serviceURL.
*
* @param serviceURL New value of property serviceURL.
*/
public void setServiceURL(String serviceURL);
/**
* Getter for property username.
*
* @return Value of property username.
*/
public String getUsername();
/**
* Setter for property username.
*
* @param username New value of property username.
*/
public void setUsername(String username);
/**
* Getter for property password.
*
* @return Value of property password.
*/
public String getPassword();
/**
* Setter for property password.
*
* @param password New value of property password.
*/
public void setPassword(String password);
/**
* Getter for property name.
*
* @return Value of property name.
*/
public String getMBean();
/**
* Setter for property mbean.
*
* @param name New value of property mbean.
*/
public void setMBean(String mbean);
/**
* This class is an implementation of PortExt interface that provides java
* model for port extensibility element.
*/
public static class PortExtImpl
extends AbstractExtensibilityElement implements PortExt {
private String mServiceURL;
private String mUsername;
private String mPassword;
private String mMBean;
public PortExtImpl() {
setElementType(QN_PORT_EXT);
}
public String getServiceURL() {
return this.mServiceURL;
}
public void setServiceURL(String serviceURL) {
this.mServiceURL = serviceURL;
}
public String getUsername() {
return this.mUsername;
}
public void setUsername(String username) {
this.mUsername = username;
}
public String getPassword() {
return this.mPassword;
}
public void setPassword(String password) {
this.mPassword = password;
}
public String getMBean() {
return this.mMBean;
}
public void setMBean(String mbean) {
this.mMBean = mbean;
}
/**
* creates and adds the port extensibility element to the wsdl
* definition
*/
public static PortExtImpl addExtensibilityElement(Definition wsdlDef, Port port) {
PortExtImpl portExt = new PortExt.PortExtImpl();
WSDLProcessor.addExtensibilityElement(wsdlDef, port, portExt, NS_DEF_PREFIX);
return portExt;
}
}
/**
* This class provides the serializer and deserializer implementation for
* port extensibility element.
*/
public static class PortExtSerializer extends AbstractExtensionSerializer implements ExtConstants {
public PortExtSerializer() {
super(Port.class, QN_PORT_EXT, PortExtImpl.class);
}
@Override
public ExtensibilityElement unmarshall(Class parentType, QName elementType, Element el,
Definition def, ExtensionRegistry extReg) throws WSDLException {
PortExt extObj = (PortExt) extReg.createExtension(parentType, elementType);
String serviceURL = el.getAttribute(ATTR_SERVICE_URL);
extObj.setServiceURL(serviceURL);
String mbean = el.getAttribute(ATTR_MBEAN);
extObj.setMBean(mbean);
String username = el.getAttribute(ATTR_USERNAME);
extObj.setUsername(username);
String password = el.getAttribute(ATTR_PASSWORD);
extObj.setPassword(password);
return extObj;
}
@Override
public void marshall(Class parentType, QName elementType, ExtensibilityElement extension,
PrintWriter pw, Definition def, ExtensionRegistry extReg) throws WSDLException {
PortExt extObj = (PortExt) extension;
StringBuffer buff = new StringBuffer();
String elName = getQualifiedName(def, NS_URI, EL_PORT_EXT);
buff.append("<" + elName);
String serviceURL = extObj.getServiceURL();
if (serviceURL != null && serviceURL.trim().length() > 0) {
buff.append(" " + ATTR_SERVICE_URL + "=${symbol_escape}"" + serviceURL + "${symbol_escape}"");
}
String mbean = extObj.getMBean();
if (mbean != null && mbean.trim().length() > 0) {
buff.append(" " + ATTR_MBEAN + "=${symbol_escape}"" + mbean + "${symbol_escape}"");
}
String username = extObj.getUsername();
if (username != null && username.trim().length() > 0) {
buff.append(" " + ATTR_USERNAME + "=${symbol_escape}"" + username + "${symbol_escape}"");
}
String password = extObj.getUsername();
if (password != null && password.trim().length() > 0) {
buff.append(" " + ATTR_PASSWORD + "=${symbol_escape}"" + password + "${symbol_escape}"");
}
buff.append("/>");
pw.println(buff.toString());
}
}
}

View File

@ -0,0 +1,223 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* WSDLExtHelper.java
*/
package net.openesb.component.${componentName}.wsdlext;
import java.util.List;
import javax.wsdl.Binding;
import javax.wsdl.BindingFault;
import javax.wsdl.BindingInput;
import javax.wsdl.BindingOperation;
import javax.wsdl.BindingOutput;
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.Service;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.xml.namespace.QName;
/**
* This class is a helper class for processing the wsdl extensions. It has
* methods that help locate the extension elements and return the java models
* corresponds to the extension elements.
*
* @author chikkala
*/
public final class WSDLExtHelper {
/**
* creates the java object for the port extension element.
*
* @param def wsdl definition
* @param serviceName QName of the service
* @param endpointName name of the port under which to lookup for the port
* extension.
* @return java object for the port extension element
*/
public static PortExt getPortExt(Definition def, QName serviceName, String endpointName) {
PortExt portExt = null;
Service wsdlService = def.getService(serviceName);
Port port = wsdlService.getPort(endpointName);
@SuppressWarnings("unchecked")
List<ExtensibilityElement> extElList = port.getExtensibilityElements();
for (ExtensibilityElement extEl : extElList) {
if (extEl instanceof PortExt) {
portExt = (PortExt) extEl;
break;
}
}
return portExt;
}
/**
* creates the java object for the binding extension element.
*
* @param def wsdl definition
* @param binding binding under which to lookup for the binding extension.
* @return java object for the port extension element
*/
public static BindingExt getBindingExt(Definition def, Binding binding) {
BindingExt bindingExt = null;
@SuppressWarnings("unchecked")
List<ExtensibilityElement> extElList = binding.getExtensibilityElements();
for (ExtensibilityElement extEl : extElList) {
if (extEl instanceof BindingExt) {
bindingExt = (BindingExt) extEl;
break;
}
}
return bindingExt;
}
/**
* creates the java object for the binding extension element.
*
* @param def wsdl definition
* @param serviceName QName of the service
* @param endpointName name of the port that references the binding.
* @return java object for the port extension element
*/
public static BindingExt getBindingExt(Definition def, QName serviceName, String endpointName) {
Service wsdlService = def.getService(serviceName);
Port port = wsdlService.getPort(endpointName);
Binding binding = port.getBinding();
return getBindingExt(def, binding);
}
/**
* @return OperationExt java object corresponding to the operation extension
* element under binding
*/
public static OperationExt getOperationExt(Definition def, Binding binding, String operation) {
OperationExt operationExt = null;
BindingOperation bindingOp = binding.getBindingOperation(operation, null, null);
if (bindingOp != null) {
@SuppressWarnings("unchecked")
List<ExtensibilityElement> extElList = bindingOp.getExtensibilityElements();
for (ExtensibilityElement extEl : extElList) {
if (extEl instanceof OperationExt) {
operationExt = (OperationExt) extEl;
break;
}
}
}
return operationExt;
}
/**
* @return OperationExt java object corresponding to the operation extension
* element under binding
*/
public static OperationExt getOperationExt(Definition def, QName serviceName, String endpointName, String operation) {
Service wsdlService = def.getService(serviceName);
Port port = wsdlService.getPort(endpointName);
Binding binding = port.getBinding();
return getOperationExt(def, binding, operation);
}
/**
* @return InputExt java object corresponding to input extension element of
* the the binding operation under binding
*/
public static InputExt getInputExt(Definition def, Binding binding,
String operation, String input) {
InputExt inputExt = null;
BindingOperation bindingOp = binding.getBindingOperation(operation, input, null);
if (bindingOp != null) {
BindingInput bindingInput = bindingOp.getBindingInput();
@SuppressWarnings("unchecked")
List<ExtensibilityElement> extElList = bindingInput.getExtensibilityElements();
for (ExtensibilityElement extEl : extElList) {
if (extEl instanceof InputExt) {
inputExt = (InputExt) extEl;
break;
}
}
}
return inputExt;
}
/**
* @return InputExt java object corresponding to input extension element of
* the the binding operation under binding
*/
public static InputExt getInputExt(Definition def,
QName serviceName, String endpointName, String operation, String input) {
Service wsdlService = def.getService(serviceName);
Port port = wsdlService.getPort(endpointName);
Binding binding = port.getBinding();
return getInputExt(def, binding, operation, input);
}
/**
* @return OutputExt java object corresponding to output extension element
* of the the binding operation under binding
*/
public static OutputExt getOutputExt(Definition def, Binding binding,
String operation, String output) {
OutputExt outputExt = null;
BindingOperation bindingOp = binding.getBindingOperation(operation, null, output);
if (bindingOp != null) {
BindingOutput bindingOutput = bindingOp.getBindingOutput();
@SuppressWarnings("unchecked")
List<ExtensibilityElement> extElList = bindingOutput.getExtensibilityElements();
for (ExtensibilityElement extEl : extElList) {
if (extEl instanceof OutputExt) {
outputExt = (OutputExt) extEl;
break;
}
}
}
return outputExt;
}
/**
* @return OutputExt java object corresponding to output extension element
* of the the binding operation under binding
*/
public static OutputExt getOutputExt(Definition def,
QName serviceName, String endpointName, String operation, String output) {
Service wsdlService = def.getService(serviceName);
Port port = wsdlService.getPort(endpointName);
Binding binding = port.getBinding();
return getOutputExt(def, binding, operation, output);
}
/**
* @return FaultExt java object corresponding to fault extension element of
* the the binding operation under binding
*/
public static FaultExt getFaultExt(Definition def, Binding binding,
String operation, String faultName) {
FaultExt faultExt = null;
BindingOperation bindingOp = binding.getBindingOperation(operation, null, null);
if (bindingOp != null) {
BindingFault bindingFault = bindingOp.getBindingFault(faultName);
if (bindingFault != null) {
@SuppressWarnings("unchecked")
List<ExtensibilityElement> extElList = bindingFault.getExtensibilityElements();
for (ExtensibilityElement extEl : extElList) {
if (extEl instanceof FaultExt) {
faultExt = (FaultExt) extEl;
break;
}
}
}
}
return faultExt;
}
/**
* @return FaultExt java object corresponding to fault extension element of
* the the binding operation under binding
*/
public static FaultExt getFaultExt(Definition def,
QName serviceName, String endpointName, String operation, String faultName) {
Service wsdlService = def.getService(serviceName);
Port port = wsdlService.getPort(endpointName);
Binding binding = port.getBinding();
return getFaultExt(def, binding, operation, faultName);
}
}

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:ext="http://java.sun.com/jbi/wsdl-extensions/sample/jmx-bc/"
targetNamespace="http://java.sun.com/jbi/wsdl-extensions/sample/jmx-bc/">
<xs:import namespace="http://schemas.xmlsoap.org/wsdl/" />
<!-- binding extension schema -->
<xs:element name="binding" type="ext:tBinding">
<xs:annotation>
<xs:documentation>
"binding" defines a protocol based binding details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tBinding">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement"/>
<!-- todo: add any attributes to the binding -->
</xs:complexContent>
</xs:complexType>
<!-- binding operation extension schema -->
<xs:element name="operation" type="ext:tOperation">
<xs:annotation>
<xs:documentation>
"operation" defines the protocol based binding operation details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tOperation">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<xs:attribute name="action" type="xs:string"/>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding operation input extension schema -->
<xs:element name="input" type="ext:tInput">
<xs:annotation>
<xs:documentation>
"input" defines the protocol based binding input details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tInput">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding operaton output extension schema -->
<xs:element name="output" type="ext:tOutput">
<xs:annotation>
<xs:documentation>
"output" defines the protocol based binding output details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tOutput">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding operation fault extension schema -->
<xs:element name="fault" type="ext:tFault">
<xs:annotation>
<xs:documentation>
"fault" defines the protocol based binding fault details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tFault">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
</xs:extension>
</xs:complexContent>
</xs:complexType>
<!-- binding port extension schema -->
<xs:element name="address" type="ext:tAddress">
<xs:annotation>
<xs:documentation>
"address" indicates protocol based binding port details.
</xs:documentation>
</xs:annotation>
</xs:element>
<xs:complexType name="tAddress">
<xs:complexContent>
<xs:extension base="wsdl:tExtensibilityElement">
<xs:attribute name="serviceURL" type="xs:anyURI" use="required" />
<xs:attribute name="username" type="xs:string" use="required" />
<xs:attribute name="password" type="xs:string" use="required" />
<xs:attribute name="mbean" type="xs:string" use="required" />
</xs:extension>
</xs:complexContent>
</xs:complexType>
</xs:schema>

View File

@ -0,0 +1,46 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* WSDLExtensionRegistry.java
*/
package net.openesb.component.${componentName}.wsdlext;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionRegistry;
import net.openesb.component.${componentName}.common.wsdl.AbstractExtensionSerializer;
import java.util.ArrayList;
import java.util.List;
/**
* This class extends
* <code>AbstractExtensionRegistry<code> to create the serializers and deserializers
* for processing wsdl extensions.
*
* @see AbstractExtensionRegistry
* @author chikkala
*/
public class WSDLExtensionRegistry extends AbstractExtensionRegistry {
/**
* Creates a new instance of JMXBindingExtensionRegistry
*/
public WSDLExtensionRegistry() {
super();
}
/**
* creates serializers and deserializers for all the extension elements
*/
protected List<AbstractExtensionSerializer> createSerializers() {
List<AbstractExtensionSerializer> list = new ArrayList<AbstractExtensionSerializer>();
list.add(new BindingExt.BindingExtSerializer());
list.add(new OperationExt.OperationExtSerializer());
list.add(new InputExt.InputExtSerializer());
list.add(new OutputExt.OutputExtSerializer());
list.add(new FaultExt.FaultExtSerializer());
list.add(new PortExt.PortExtSerializer());
return list;
}
}

View File

@ -0,0 +1,246 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* BEGIN_HEADER - DO NOT EDIT
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* If applicable add the following below this CDDL HEADER,
* with the fields enclosed by brackets "[]" replaced with
* your own identifying information: Portions Copyright
* [year] [name of copyright owner]
*/
/*
* @(${symbol_pound})EndpointImplTest.java
*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
*
* END_HEADER - DO NOT EDIT
*/
package com.sun.jbi.filebc;
import junit.framework.*;
import com.sun.jbi.eManager.provider.EndpointStatus;
import com.sun.jbi.filebc.extensions.FileAddress;
import com.sun.jbi.filebc.extensions.FileBinding;
import com.sun.jbi.filebc.extensions.FileOperation;
import java.util.HashMap;
import java.util.Map;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.wsdl.Definition;
import javax.xml.namespace.QName;
import com.ibm.wsdl.DefinitionImpl;
import org.w3c.dom.Document;
import org.jmock.*;
/**
*
* @author sweng
*/
public class EndpointImplTest extends MockObjectTestCase {
EndpointImpl instance = null;
public EndpointImplTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
instance = new EndpointImpl();
}
protected void tearDown() throws Exception {
}
public static Test suite() {
TestSuite suite = new TestSuite(EndpointImplTest.class);
return suite;
}
/**
* Test of setServiceName and getServiceName method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetServiceName() {
System.out.println("Testing setServiceName and getServiceName");
QName expResult = new QName("http://my-filebc-test/mynamespace", "myFileService");
instance.setServiceName(new QName("http://my-filebc-test/mynamespace", "myFileService"));
QName result = instance.getServiceName();
assertEquals(expResult, result);
System.out.println("Successfully tested setServiceName and getServiceName");
}
/**
* Test of setEndpointName and getEndpointName method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetEndpointName() {
System.out.println("Testing setEndpointName and getEndpointName");
String expResult = "myFileTestPort";
instance.setEndpointName("myFileTestPort");
String result = instance.getEndpointName();
assertEquals(expResult, result);
System.out.println("Successfully tested setEndpointName and getEndpointName");
}
/**
* Test of setDefinition and getDefinition method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetDefinition() {
System.out.println("Testing setDefinition and getDefinition");
Definition val = new DefinitionImpl();
instance.setDefinition(val);
Definition result = instance.getDefinition();
assertTrue(result instanceof Definition);
System.out.println("Successfully tested setDefinition and getDefinition");
}
/**
* Test of setState and getState method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetState() {
System.out.println("Testing setState and getState");
int expResult = 0;
instance.setState(0);
int result = instance.getState();
assertEquals(expResult, result);
System.out.println("Successfully tested setState and getState");
}
/**
* Test of setEndpointStatus and getEndpointStatus method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetEndpointStatus() {
System.out.println("Testing setEndpointStatus and getEndpointStatus");
Mock endpointStatus = mock(EndpointStatus.class);
instance.setEndpointStatus((EndpointStatus) endpointStatus.proxy());
EndpointStatus result = instance.getEndpointStatus();
assertTrue(result instanceof EndpointStatus);
System.out.println("Successfully tested setEndpointStatus and getEndpointStatus");
}
/**
* Test of setEndpointType and getEndpointType method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetEndpointType() {
System.out.println("Testing setEndpointType and getEndpointType");
int expResult = 1;
instance.setEndpointType(1);
int result = instance.getEndpointType();
assertEquals(expResult, result);
System.out.println("Successfully tested setEndpointType and getEndpointType");
}
/**
* Test of setServiceEndpoint and getServiceEndpoint method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetServiceEndpoint() {
System.out.println("Testing setServiceEndpoint and getServiceEndpoint");
Mock serviceEndpoint = mock(ServiceEndpoint.class);
instance.setServiceEndpoint((ServiceEndpoint) serviceEndpoint.proxy());
ServiceEndpoint result = instance.getServiceEndpoint();
assertTrue(result instanceof ServiceEndpoint);
System.out.println("Successfully tested setServiceEndpoint and getServiceEndpoint");
}
/**
* Test of setServiceDescription and getServiceDescription method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetServiceDescription() {
System.out.println("Testing setServiceDescription and getServiceDescription");
Mock document = mock(Document.class);
instance.setServiceDescription((Document) document.proxy());
Document result = instance.getServiceDescription();
assertTrue(result instanceof Document);
System.out.println("Successfully tested setServiceDescription and getServiceDescription");
}
/**
* Test of setFileAddress and getFileAddress method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetFileAddress() {
System.out.println("Testing setFileAddress and getFileAddress");
instance.setFileAddress(new FileAddress());
FileAddress result = instance.getFileAddress();
assertTrue(result instanceof FileAddress);
System.out.println("Successfully tested setFileAddress and getFileAddress");
}
/**
* Test of setFileBinding and getFileBinding method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetFileBinding() {
System.out.println("Testing setFileBinding and getFileBinding");
instance.setFileBinding(new FileBinding());
FileBinding result = instance.getFileBinding();
assertTrue(result instanceof FileBinding);
System.out.println("Successfully tested setFileBinding and getFileBinding");
}
/**
* Test of setFileOperations and getFileOperations method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetFileOperations() {
System.out.println("Testing setFileOperations and getFileOperations");
Map val = new HashMap();
val.put(new QName("http://some-url", "operation1"), new FileOperation());
val.put(new QName("http://some-url", "operation2"), new FileOperation());
instance.setFileOperations(val);
Map result = instance.getFileOperations();
assertTrue(result instanceof Map);
assertEquals(val, result);
System.out.println("Successfully tested setFileOperations and getFileOperations");
}
/**
* Test of setOperationMsgExchangePattern and getOperationMsgExchangePattern method, of class com.sun.jbi.filebc.EndpointImpl.
*/
public void testSetGetOperationMsgExchangePattern() {
System.out.println("Testing setOperationMsgExchangePattern and getOperationMsgExchangePattern");
Map val = new HashMap();
val.put(QName.valueOf("operation1"), "inonly");
val.put(QName.valueOf("operation2"), "inout");
instance.setOperationMsgExchangePattern(val);
Map result = instance.getOperationMsgExchangePattern();
assertTrue(result instanceof Map);
assertEquals(val, result);
System.out.println("Successfully tested setOperationMsgExchangePattern and getOperationMsgExchangePattern");
}
}

View File

@ -0,0 +1,83 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* BEGIN_HEADER - DO NOT EDIT
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* If applicable add the following below this CDDL HEADER,
* with the fields enclosed by brackets "[]" replaced with
* your own identifying information: Portions Copyright
* [year] [name of copyright owner]
*/
/*
* @(${symbol_pound})FaultExceptionTest.java
*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
*
* END_HEADER - DO NOT EDIT
*/
package com.sun.jbi.filebc;
import junit.framework.*;
import javax.jbi.messaging.MessagingException;
/**
*
* @author sweng
*/
public class FaultExceptionTest extends TestCase {
FaultException instance = new FaultException(new MessagingException("Testing exception message"));
public FaultExceptionTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
}
protected void tearDown() throws Exception {
}
public static Test suite() {
TestSuite suite = new TestSuite(FaultExceptionTest.class);
return suite;
}
/**
* Test of getFaultCode method, of class com.sun.jbi.filebc.FaultException.
*/
public void testSetGetFaultCode() {
System.out.println("Testing getFaultCode");
String expResult = "Server";
String result = instance.getFaultCode();
assertEquals(expResult, result);
}
/**
* Test of getDetail method, of class com.sun.jbi.filebc.FaultException.
*/
public void testGetDetail() {
System.out.println("Testing getDetail");
String expResult = "Testing exception message";
String result = instance.getDetail();
assertEquals(expResult, result);
}
}

View File

@ -0,0 +1,246 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* BEGIN_HEADER - DO NOT EDIT
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* If applicable add the following below this CDDL HEADER,
* with the fields enclosed by brackets "[]" replaced with
* your own identifying information: Portions Copyright
* [year] [name of copyright owner]
*/
/*
* @(${symbol_pound})FileBindingDeployerTest.java
*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
*
* END_HEADER - DO NOT EDIT
*/
package com.sun.jbi.filebc;
import junit.framework.*;
import com.sun.jbi.eManager.provider.StatusProviderHelper;
import javax.jbi.component.ComponentContext;
import javax.jbi.messaging.DeliveryChannel;
import javax.management.MBeanServer;
import java.util.HashMap;
import org.jmock.*;
/**
*
* @author sweng
*/
public class FileBindingDeployerTest extends org.jmock.cglib.MockObjectTestCase {
FileBindingDeployer instance = null;
Mock componentContext = mock(ComponentContext.class);
Mock lifeCycle = mock(FileBindingLifeCycle.class);
Mock mbServer = mock(MBeanServer.class);
public FileBindingDeployerTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
instance = new FileBindingDeployer((ComponentContext) componentContext.proxy(),
(FileBindingLifeCycle) lifeCycle.proxy());
}
protected void tearDown() throws Exception {
}
public static Test suite() {
TestSuite suite = new TestSuite(FileBindingDeployerTest.class);
return suite;
}
/**
* Test of deploy method, of class com.sun.jbi.filebc.FileBindingDeployer.
*/
public void testDeploy() throws Exception {
System.out.println("Testing deploy");
RuntimeConfiguration runtimeConfig = new RuntimeConfiguration("test/com/sun/jbi/filebc/testDir", null);
StatusProviderHelper statusHelper =
new StatusProviderHelper("shortName", "componentType", "componentName", (MBeanServer)mock(MBeanServer.class).proxy());
InboundReceiver inboundReceiver = new InboundReceiver((ComponentContext) componentContext.proxy(),
(DeliveryChannel) mock(DeliveryChannel.class).proxy(),
runtimeConfig);
//HashMap serviceUnits = new HashMap();
componentContext.expects(once()).method("getComponentName").will(returnValue("someComponentName"));
lifeCycle.expects(atLeastOnce()).method("getStatusProviderHelper").will(returnValue(statusHelper));
lifeCycle.expects(once()).method("getInboundReceiver").will(returnValue(inboundReceiver));
lifeCycle.expects(once()).method("getRuntimeConfigurationMBean").will(returnValue(runtimeConfig));
String result = instance.deploy("testSUId", "test/com/sun/jbi/filebc/packaging/descriptors");
assertNotNull(result);
}
/**
* Test of init method, of class com.sun.jbi.filebc.FileBindingDeployer.
*/
public void testInit() throws Exception {
System.out.println("Testing init");
// 1. testing the scenario when a new service unit is to be initialized.
RuntimeConfiguration runtimeConfig = new RuntimeConfiguration("test/com/sun/jbi/filebc/testDir", null);
StatusProviderHelper statusHelper =
new StatusProviderHelper("shortName", "componentType", "componentName", (MBeanServer)mock(MBeanServer.class).proxy());
InboundReceiver inboundReceiver = new InboundReceiver((ComponentContext) componentContext.proxy(),
(DeliveryChannel) mock(DeliveryChannel.class).proxy(),
runtimeConfig);
HashMap serviceUnits = new HashMap();
lifeCycle.expects(atLeastOnce()).method("getStatusProviderHelper").will(returnValue(statusHelper));
lifeCycle.expects(once()).method("getInboundReceiver").will(returnValue(inboundReceiver));
lifeCycle.expects(once()).method("getRuntimeConfigurationMBean").will(returnValue(runtimeConfig));
//componentContext.expects(atLeastOnce()).method("getLogger").with(eq(DeploymentLookup.class.getName()), eq(null)).will(returnValue(Logger.getLogger(DeploymentLookup.class.getName(), null)));
//componentContext.expects(atLeastOnce()).method("getMBeanServer").will(returnValue(mbServer.proxy()));
//mbServer.expects(atLeastOnce()).method("queryNames").with(isA(ObjectName.class), NULL);
//componentContext.expects(atLeastOnce()).method("getComponentName").will(returnValue("someComponentName"));
try {
instance.init("testSUId", "test/com/sun/jbi/filebc/packaging/descriptors");
System.out.println("Successfully tested init for a new service unit");
} catch (Exception e) {
e.printStackTrace();
fail("Failed to test init for a new service unit");
}
// 2. testing the scenario when the service unit is already initialized
serviceUnits.put("testSUId", mock(ServiceUnit.class).proxy());
try {
instance.init("testSUId", "testSURoot");
System.out.println("Successfully tested init for an existing service unit");
} catch (Exception e) {
fail("Failed to test init for an existing service unit");
}
}
/**
* Test of start method, of class com.sun.jbi.filebc.FileBindingDeployer.
*/
public void testStart() throws Exception {
System.out.println("Testing start");
// setting up service units
Mock aServiceUnit = mock(ServiceUnit.class);
HashMap serviceUnits = instance.getServiceUnits();
serviceUnits.put("testSUId", (ServiceUnit)aServiceUnit.proxy());
aServiceUnit.expects(once()).method("start");
aServiceUnit.expects(atLeastOnce()).method("getEndpoints");
// 1. testing the scenario when the service unit is initialized
try {
instance.start("testSUId");
System.out.println("Successfully tested start when the service unit is initialized");
aServiceUnit.verify();
} catch (Exception e) {
fail("Failed to test start when the service unit is initialized due to: " + e.getMessage());
}
// 2. testing the scenario when the service unit is not initialized
try {
instance.start("noMatchSUId");
System.out.println("Successfully tested start when the service unit is not initialized");
} catch (Exception e) {
fail("Failed to test start when the service unit is not initialized due to: " + e.getMessage());
}
}
/**
* Test of stop method, of class com.sun.jbi.filebc.FileBindingDeployer.
*/
public void testStop() throws Exception {
System.out.println("Testing stop");
// setting up service units
Mock aServiceUnit = mock(ServiceUnit.class);
HashMap serviceUnits = instance.getServiceUnits();
serviceUnits.put("testSUId", (ServiceUnit)aServiceUnit.proxy());
aServiceUnit.expects(once()).method("stop");
aServiceUnit.expects(atLeastOnce()).method("getEndpoints");
// 1. testing the scenario when the service unit is initialized
try {
instance.stop("testSUId");
System.out.println("Successfully tested stop when the service unit is initialized");
aServiceUnit.verify();
} catch (Exception e) {
fail("Failed to test stop when the service unit is initialized due to: " + e.getMessage());
}
// 2. testing the scenario when the service unit is not initialized
try {
instance.stop("noMatchSUId");
System.out.println("Successfully tested stop when the service unit is not initialized");
} catch (Exception e) {
fail("Failed to test stop when the service unit is not initialized due to: " + e.getMessage());
}
}
/**
* Test of shutDown method, of class com.sun.jbi.filebc.FileBindingDeployer.
*/
public void testShutDown() throws Exception {
System.out.println("Testing shutDown");
// setting up service units
Mock aServiceUnit = mock(ServiceUnit.class);
HashMap serviceUnits = instance.getServiceUnits();
serviceUnits.put("testSUId", (ServiceUnit)aServiceUnit.proxy());
aServiceUnit.expects(once()).method("shutdown");
aServiceUnit.expects(atLeastOnce()).method("getEndpoints");
// 1. testing the scenario when the service unit is initialized
try {
instance.shutDown("testSUId");
System.out.println("Successfully tested shutDown when the service unit is initialized");
aServiceUnit.verify();
} catch (Exception e) {
fail("Failed to test shutDown when the service unit is initialized due to: " + e.getMessage());
}
// 2. testing the scenario when the service unit is not initialized
try {
instance.shutDown("noMatchSUId");
System.out.println("Successfully tested shutDown when the service unit is not initialized");
} catch (Exception e) {
fail("Failed to test shutDown when the service unit is not initialized due to: " + e.getMessage());
}
}
/**
* Test of undeploy method, of class com.sun.jbi.filebc.FileBindingDeployer.
*/
public void testUndeploy() throws Exception {
System.out.println("Testing undeploy");
Mock aServiceUnit = mock(ServiceUnit.class);
componentContext.expects(once()).method("getComponentName").will(returnValue("someComponentName"));
aServiceUnit.expects(atLeastOnce()).method("getEndpoints");
//aServiceUnit.expects(once()).method("shutdown");
HashMap serviceUnits = instance.getServiceUnits();
serviceUnits.put("testSUId", (ServiceUnit)aServiceUnit.proxy());
instance.undeploy("testSUId", "testRoot");
assertNull(instance.getServiceUnits().get("testSUId"));
}
}

View File

@ -0,0 +1,217 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* BEGIN_HEADER - DO NOT EDIT
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* p]ermissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* If applicable add the following below this CDDL HEADER,
* with the fields enclosed by brackets "[]" replaced with
* your own identifying information: Portions Copyright
* [year] [name of copyright owner]
*/
/*
* @(${symbol_pound})FileBindingLifeCycleTest.java
*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
*
* END_HEADER - DO NOT EDIT
*/
package com.sun.jbi.filebc;
import junit.framework.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.jbi.component.ComponentContext;
import javax.jbi.component.ComponentLifeCycle;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.xml.namespace.QName;
import org.w3c.dom.Document;
import org.jmock.*;
/**
*
* @author sweng
*/
public class FileBindingLifeCycleTest extends org.jmock.cglib.MockObjectTestCase {
FileBindingLifeCycle instance = null;
Mock jbiContext = mock(ComponentContext.class);
Mock deliveryChannel = mock(DeliveryChannel.class);
public FileBindingLifeCycleTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
instance = new FileBindingLifeCycle();
}
protected void tearDown() throws Exception {
}
public static Test suite() {
TestSuite suite = new TestSuite(FileBindingLifeCycleTest.class);
return suite;
}
/**
* Test of getLifeCycle method, of class com.sun.jbi.filebc.FileBindingLifeCycle.
*/
public void testGetLifeCycle() {
System.out.println("Testing getLifeCycle");
ComponentLifeCycle result = instance.getLifeCycle();
assertEquals(instance, result);
}
/**
* Test of init method, of class com.sun.jbi.filebc.FileBindingLifeCycle.
*/
/* public void testInit() throws Exception {
System.out.println("Testing init");
// 1. testing the success scenario
Mock mbServer = mock(MBeanServer.class);
Mock mBeanNames = mock(MBeanNames.class);
Mock on = mock(ObjectName.class, new Class[]{String.class},
new Object[]
{"com.sun.jbi:ComponentName=sun-file-binding,ComponentType=Installed,ControlType=Custom,CustomControlName=Statistics,InstalledType=Binding,JbiName=server"});
Mock mStatusProviderHelper = mock(StatusProviderHelper.class,
new Class[] {String.class, ObjectName.class, MBeanServer.class},
new Object[] {"A", on.proxy(), mbServer.proxy()});
jbiContext.expects(atLeastOnce()).method("getLogger").with(eq(FileBindingLifeCycle.class.getName()),eq("com.sun.jbi.filebc.messages.Bundle")).will(returnValue(Logger.getLogger(FileBindingLifeCycle.class.getName(), "com.sun.jbi.filebc.messages.Bundle")));
jbiContext.expects(atLeastOnce()).method("getLogger").with(eq("com.sun.jbi.filebc.FileBindingDeployer"), eq("com.sun.jbi.filebc.messages.Bundle")).will(returnValue(Logger.getLogger("com.sun.jbi.filebc.FileBindingDeployer", "com.sun.jbi.filebc.messages.Bundle")));
jbiContext.expects(atLeastOnce()).method("getLogger").with(eq("com.sun.jbi.filebc.RuntimeConfiguration"), eq("com.sun.jbi.filebc.messages.Bundle")).will(returnValue(Logger.getLogger("com.sun.jbi.filebc.RuntimeConfiguration", "com.sun.jbi.filebc.messages.Bundle")));
//jbiContext.expects(atLeastOnce()).method("getLogger").with(eq("com.sun.jbi.filebc.InboundMessageProcessor"), eq("com.sun.jbi.filebc.messages.Bundle")).will(returnValue(Logger.getLogger("com.sun.jbi.filebc.InboundMessageProcessor", "com.sun.jbi.filebc.messages.Bundle")));
//jbiContext.expects(atLeastOnce()).method("getLogger").with(eq("com.sun.jbi.filebc.OutboundMessageProcessor"), eq("com.sun.jbi.filebc.messages.Bundle")).will(returnValue(Logger.getLogger("com.sun.jbi.filebc.OutboundMessageProcessor", "com.sun.jbi.filebc.messages.Bundle")));
jbiContext.expects(atLeastOnce()).method("getMBeanServer").will(returnValue(mbServer.proxy()));
jbiContext.expects(atLeastOnce()).method("getMBeanNames").will(returnValue(mBeanNames.proxy()));
mbServer.expects(atLeastOnce()).method("isRegistered").will(returnValue(true));
jbiContext.expects(atLeastOnce()).method("getComponentName").will(returnValue("someComponentName"));
jbiContext.expects(atLeastOnce()).method("getWorkspaceRoot").will(returnValue("test/com/sun/jbi/filebc/testDir"));
jbiContext.expects(atLeastOnce()).method("getDeliveryChannel").will(returnValue(deliveryChannel.proxy()));
//deliveryChannel.expects(atLeastOnce()).method("accept").will(returnValue((MessageExchange) mock(MessageExchange.class).proxy()));
jbiContext.expects(atLeastOnce()).method("getInstallRoot").will(returnValue("test/com/sun/jbi/filebc/testDir"));
jbiContext.expects(atLeastOnce()).method("getLogger").with(eq(MessagingChannel.class.getName()), eq(null)).will(returnValue(Logger.getLogger(MessagingChannel.class.getName(), null)));
jbiContext.expects(atLeastOnce()).method("activateEndpoint");
//mBeanNames.expects(atLeastOnce()).method("createCustomComponentMBeanName").with(eq("Statistics")).will(returnValue(new ObjectName("com.sun.jbi:ComponentName=sun-file-binding,ComponentType=Installed,ControlType=Custom,CustomControlName=Statistics,InstalledType=Binding,JbiName=server")));
mBeanNames.expects(atLeastOnce()).method("createCustomComponentMBeanName").will(returnValue(on.proxy()));
mStatusProviderHelper.expects(atLeastOnce()).method("registerMBean");
try {
// instance.init((ComponentContext)jbiContext.proxy());
System.out.println("Successfully tested init for the scenario where no exception is expected.");
} catch (Exception e) {
fail("Failed to test init due to: " + e.getMessage());
}
jbiContext.verify();
// 2. testing the failure scenario
jbiContext.expects(once()).method("getDeliveryChannel").will(throwException(new MessagingException("someException")));
try {
instance.init((ComponentContext)jbiContext.proxy());
fail("Failed to test init when an exception should be caught - a MessagingException is raised for failure to get Delivery Channel.");
} catch (Exception e) {
System.out.println("Successfully tested init when an exception is raised.");
}
jbiContext.verify();
}*/
/**
* Test of shutDown method, of class com.sun.jbi.filebc.FileBindingLifeCycle.
*/
// public void testShutDown() throws Exception {
// System.out.println("Testing shutDown");
//
// // 1. testing the success scenario
// deliveryChannel.expects(once()).method("close");
// try {
// instance.shutDown();
// System.out.println("Successfully tested shutDown");
// } catch (Exception e) {
// fail("Failed to test shutDown due to: " + e.getMessage());
// }
//
// // 2. testing the failure scenario
// deliveryChannel.expects(once()).method("close").will(throwException (new MessagingException("someException")));
// try {
// instance.shutDown();
// fail("Failed to test shutDown when an exception should be caught - a MessagingException should be raised for failure to close Delivery Channel.");
// } catch (Exception e) {
// System.out.println("Successfully tested shutDown when an exception is raised.");
// }
// }
/**
* Test of getServiceDescription method, of class com.sun.jbi.filebc.FileBindingLifeCycle.
*/
public void testgetServiceDescription() throws Exception {
System.out.println("Testing getServiceDescription");
QName serviceName = new QName("testServiceName");
String endpointName = "testEndpointName";
HashMap serviceUnits = new HashMap();
List endpoints = new ArrayList();
Endpoint endpoint = new EndpointImpl();
Document theDoc;
Mock serviceUnit = mock(ServiceUnit.class);
Mock serviceEndpoint = mock(ServiceEndpoint.class);
Mock document = mock(Document.class);
Mock deployer = mock(FileBindingDeployer.class,
new Class[]{ComponentContext.class, FileBindingLifeCycle.class},
new Object[]{(ComponentContext) jbiContext.proxy(), instance});
theDoc = (Document) document.proxy();
serviceEndpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(serviceName));
serviceEndpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(endpointName));
// 1. testing the scenario where there is a match
endpoint.setServiceName(serviceName);
endpoint.setEndpointName(endpointName);
endpoint.setServiceDescription(theDoc);
endpoint.setEndpointType(Endpoint.EndpointType.OUTBOUND);
endpoints.add(endpoint);
serviceUnit.expects(atLeastOnce()).method("getEndpoints").will(returnValue(endpoints));
serviceUnits.put("someKey", (ServiceUnit) serviceUnit.proxy());
deployer.expects(atLeastOnce()).method("getServiceUnits").will(returnValue(serviceUnits));
instance.setServiceUnitManager((FileBindingDeployer) deployer.proxy());
Document result = instance.getServiceDescription((ServiceEndpoint) serviceEndpoint.proxy());
assertEquals(theDoc, result);
// 2. testing the scenario where there is no match
serviceEndpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(serviceName));
serviceEndpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue("noMatchingEndpoint"));
result = instance.getServiceDescription((ServiceEndpoint) serviceEndpoint.proxy());
assertNull(result);
}
}

View File

@ -0,0 +1,226 @@
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
/*
* BEGIN_HEADER - DO NOT EDIT
*
* The contents of this file are subject to the terms
* of the Common Development and Distribution License
* (the "License"). You may not use this file except
* in compliance with the License.
*
* You can obtain a copy of the license at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* See the License for the specific language governing
* permissions and limitations under the License.
*
* When distributing Covered Code, include this CDDL
* HEADER in each file and include the License file at
* https://${package}.dev.java.net/public/CDDLv1.0.html.
* If applicable add the following below this CDDL HEADER,
* with the fields enclosed by brackets "[]" replaced with
* your own identifying information: Portions Copyright
* [year] [name of copyright owner]
*/
/*
* @(${symbol_pound})FileDenormalizerTest.java
*
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
*
* END_HEADER - DO NOT EDIT
*/
package com.sun.jbi.filebc;
import com.sun.jbi.filebc.extensions.FileMessage;
import com.sun.jbi.filebc.extensions.FileOperation;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import javax.jbi.messaging.NormalizedMessage;
import javax.wsdl.Definition;
import javax.wsdl.Binding;
import javax.wsdl.Input;
import javax.wsdl.Output;
import javax.wsdl.Message;
import javax.wsdl.Operation;
import javax.wsdl.Part;
import javax.wsdl.Port;
import javax.wsdl.PortType;
import javax.wsdl.Service;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.dom.DOMSource;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.InputSource;
import org.jmock.*;
/**
*
* @author sweng
*/
public class FileDenormalizerTest extends org.jmock.cglib.MockObjectTestCase {
FileDenormalizer instance = new FileDenormalizer();
Mock normalizedMsg = mock(NormalizedMessage.class);
Mock endpoint = mock(Endpoint.class);
Mock definition = mock(Definition.class);
Mock service = mock(Service.class);
Mock port = mock(Port.class);
Mock portType = mock(PortType.class);
Mock binding = mock(Binding.class);
Mock operation = mock(Operation.class);
Mock input = mock(Input.class);
Mock output = mock(Output.class);
Mock message = mock(Message.class);
Mock part = mock(Part.class);
QName operationName = QName.valueOf("test");
String partname = "";
byte[] data = null;
HashMap endpointOps = new HashMap();
ArrayList operations = new ArrayList();
ArrayList parts = new ArrayList();
HashMap partmap = new HashMap();
HashMap operationMeps = new HashMap();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
Document document;
Node node;
DOMSource source;
public FileDenormalizerTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
endpoint.expects(atLeastOnce()).method("getDefinition").will(returnValue(definition.proxy()));
endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(QName.valueOf("service1")));
endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue("endpoint1"));
endpoint.expects(atLeastOnce()).method("getFileOperations").will(returnValue(endpointOps));
endpoint.expects(atLeastOnce()).method("getOperationMsgExchangePattern").will(returnValue(operationMeps));
endpoint.expects(atLeastOnce()).method("getMessagePartEncoderMapping").will(returnValue(new HashMap()));
definition.expects(atLeastOnce()).method("getService").will(returnValue((Service) service.proxy()));
service.expects(atLeastOnce()).method("getPort").will(returnValue((Port) port.proxy()));
port.expects(atLeastOnce()).method("getBinding").will(returnValue((Binding) binding.proxy()));
binding.expects(atLeastOnce()).method("getPortType").will(returnValue((PortType) portType.proxy()));
portType.expects(atLeastOnce()).method("getOperations").will(returnValue(operations));
portType.expects(atLeastOnce()).method("getQName").will(returnValue(QName.valueOf("service1")));
partmap.put("part1", (Part) part.proxy());
parts.add((Part) part.proxy());
builder = factory.newDocumentBuilder();
}
protected void tearDown() throws Exception {
}
/**
* Test of denormalize method, of class com.sun.jbi.filebc.FileDenormalizer.
*/
public void testDenormalizeCase1() throws Exception {
System.out.println("Testing denormalize case 1.");
byte[] expResult = null;
FileMessage fileMessage = new FileMessage();
// testing the following case
// operation not found
document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
node = document.createTextNode("HelloWorld");
normalizedMsg.expects(atLeastOnce()).method("getContent").will(returnValue(new DOMSource(node)));
try {
instance.denormalize((NormalizedMessage) normalizedMsg.proxy(),
operationName,
(Endpoint) endpoint.proxy(),
fileMessage);
fail("Failed to test denormalize - an exception should've been raised by FileDenormalizer due to unmatched operation name.");
} catch (Exception e) {
}
// testing the following case
// invalid mep
endpointOps.put(QName.valueOf("test"), (Operation) operation.proxy());
operationMeps.put(QName.valueOf("test"), "outin");
try {
instance.denormalize((NormalizedMessage) normalizedMsg.proxy(),
operationName,
(Endpoint) endpoint.proxy(),
fileMessage);
fail("Failed to test denormalize - an exception should've been raised by FileDenormalizer due to unmatched operation name.");
} catch (Exception e) {
}
System.out.println("Testing denormalize case 1.");
}
/**
* Test of denormalize method, of class com.sun.jbi.filebc.FileDenormalizer.
*/
public void testDenormalizeCase2() throws Exception {
System.out.println("Testing denormalize case 2.");
FileMessage fileMessage = new FileMessage();
// testing the following case
// mep type is "inonly"
// part element is defined
// valid data
String nmsg = "<jbi:message xmlns:msgns=${symbol_escape}"urn:FooBar3${symbol_escape}"" +
" xmlns:jbi=${symbol_escape}"http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper${symbol_escape}"" +
" type=${symbol_escape}"msgns:message1${symbol_escape}"" +
" version=${symbol_escape}"1.0${symbol_escape}">" +
" <jbi:part>" +
" <foo xmlns=${symbol_escape}"urn:FooBar3${symbol_escape}">" +
" <string>HelloWorld</string>" +
" </foo>" +
" </jbi:part>" +
"</jbi:message>";
document = builder.parse(new InputSource(new StringReader(nmsg)));
node = document.getDocumentElement();
source = new DOMSource(node);
endpointOps.put(QName.valueOf("test"), new FileOperation());
operationMeps.put(QName.valueOf("test"), "inonly");
operations.add((Operation) operation.proxy());
operation.expects(atLeastOnce()).method("getName").will(returnValue("test"));
normalizedMsg.expects(atLeastOnce()).method("getContent").will(returnValue(source));
part.expects(atLeastOnce()).method("getName").will(returnValue("part1"));
part.expects(atLeastOnce()).method("getElementName").will(returnValue(QName.valueOf("foo")));
part.expects(atLeastOnce()).method("getTypeName").will(returnValue(QName.valueOf("foo")));
definition.expects(atLeastOnce()).method("getMessage").will(returnValue((Message) message.proxy()));
message.expects(atLeastOnce()).method("getQName").will(returnValue(QName.valueOf("message1")));
message.expects(atLeastOnce()).method("getOrderedParts").will(returnValue(parts));
message.expects(once()).method("getParts").will(returnValue(partmap));
operation.expects(once()).method("getInput").will(returnValue((Input) input.proxy()));
input.expects(once()).method("getMessage").will(returnValue((Message) message.proxy()));
try {
instance.denormalize((NormalizedMessage) normalizedMsg.proxy(),
operationName,
(Endpoint) endpoint.proxy(),
fileMessage);
} catch (Exception e) {
fail("Failed to test denormalize due to: " + e.getMessage());
}
// testing the following case
// mep type is "inout"
// part is defined
fileMessage.setPart("part1");
operationMeps.put(QName.valueOf("test"), "inout");
operation.expects(once()).method("getOutput").will(returnValue((Output) output.proxy()));
message.expects(once()).method("getPart").will(returnValue((Part) part.proxy()));
output.expects(once()).method("getMessage").will(returnValue((Message) message.proxy()));
try {
instance.denormalize((NormalizedMessage) normalizedMsg.proxy(),
operationName,
(Endpoint) endpoint.proxy(),
fileMessage);
} catch (Exception e) {
fail("Failed to test denormalize due to: " + e.getMessage());
}
System.out.println("Successfully tested denormalize case 2.");
}
}

Some files were not shown because too many files have changed in this diff Show More