Maven archtype based on OpenESB existing structure,New project now can be build with OpenESB/Netbeans-SOA builds
parent
afe19d7058
commit
555243f539
|
@ -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.
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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
|
||||
|
|
@ -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>
|
|
@ -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
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
user.properties.file=D:\\softwares\\openesb_logicoy_last_working57\\.netbeans\\openesb\\build.properties
|
|
@ -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}
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
|||
suite.dir=${basedir}/..
|
|
@ -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>
|
|
@ -0,0 +1 @@
|
|||
cname.template.WSDLExtTemplateProvider
|
|
@ -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
|
|
@ -0,0 +1 @@
|
|||
cname.validator.WSDLExtValidatorSchemaFactory
|
|
@ -0,0 +1,2 @@
|
|||
cname.validator.WSDLExtValidator
|
||||
|
|
@ -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>
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 449 B |
Binary file not shown.
After Width: | Height: | Size: 1.0 KiB |
Binary file not shown.
After Width: | Height: | Size: 315 B |
Binary file not shown.
After Width: | Height: | Size: 465 B |
Binary file not shown.
After Width: | Height: | Size: 315 B |
Binary file not shown.
After Width: | Height: | Size: 393 B |
|
@ -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
|
||||
|
||||
|
||||
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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
|
||||
// ));
|
||||
//
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
#Wed Jul 24 14:12:01 IST 2013
|
||||
package=it.pkg
|
||||
version=0.1-SNAPSHOT
|
||||
groupId=archetype.it
|
||||
artifactId=basic
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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() {
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
|
@ -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.");
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
|
@ -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;
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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("&");
|
||||
break;
|
||||
case '<': sbuff.append("<");
|
||||
break;
|
||||
case '>': sbuff.append(">");
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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";
|
||||
}
|
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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());
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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>
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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");
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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"));
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
|
@ -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
Loading…
Reference in New Issue