diff --git a/maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt b/maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt
new file mode 100644
index 000000000..8937b0b96
--- /dev/null
+++ b/maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt
@@ -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.
+
+
diff --git a/maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt~ b/maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt~
new file mode 100644
index 000000000..8937b0b96
--- /dev/null
+++ b/maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt~
@@ -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.
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/pom.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/pom.xml
new file mode 100644
index 000000000..1fae9e48f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/pom.xml
@@ -0,0 +1,35 @@
+
+
+ 4.0.0
+
+ open-jbi-components
+ BindingComponent-Plugin-archetype
+ 2.3.0
+ jar
+
+ BindingComponent-Plugin-archetype
+
+
+
+
+ org.apache.maven.archetype
+ archetype-packaging
+ 2.2
+
+
+
+
+
+
+ maven-archetype-plugin
+ 2.2
+
+
+
+
+
+ Maven project for JBI Component that contains the
+ maven and netbeans build setup and component code to build and test the JBI Component.
+
+ http://open-esb.org
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml
new file mode 100644
index 000000000..709092f22
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+ nbproject
+
+ **/*.xml
+ **/*.properties
+
+
+
+ src
+
+ **/*.java
+ **/*.xml
+ **/*.properties
+
+
+
+ src
+
+ **/*.ExtensibilityElementTemplateProvider
+ **/*.ElementFactory
+ **/*.png
+ **/*.ValidatorSchemaFactory
+ **/*.Validator
+ **/*.xsd
+
+
+
+
+
+ build.xml
+ pom.xml
+ **/*.mf
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/build.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/build.xml
new file mode 100644
index 000000000..158b4a4f7
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/build.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+ Builds, tests, and runs the project bcdeployplugin.
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/manifest.mf b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/manifest.mf
new file mode 100644
index 000000000..e2ee77258
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/manifest.mf
@@ -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
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml
new file mode 100644
index 000000000..877727427
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ You must set 'suite.dir' to point to your containing module suite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties
new file mode 100644
index 000000000..0b8724d2a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties
@@ -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
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties
new file mode 100644
index 000000000..90eaca546
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties
@@ -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
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/private/platform-private.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/private/platform-private.properties
new file mode 100644
index 000000000..b52edef60
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/private/platform-private.properties
@@ -0,0 +1 @@
+user.properties.file=D:\\softwares\\openesb_logicoy_last_working57\\.netbeans\\openesb\\build.properties
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties
new file mode 100644
index 000000000..7b829ab89
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.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}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml
new file mode 100644
index 000000000..9fdac1d87
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml
@@ -0,0 +1,56 @@
+
+
+ org.netbeans.modules.apisupport.project
+
+
+ bcdeployplugin
+
+
+
+ org.netbeans.modules.soa.wsdl.bindingsupport
+
+
+
+ 7.2.1
+
+
+
+ org.netbeans.modules.xml.schema.model
+
+
+
+ 1
+ 1.2
+
+
+
+ org.netbeans.modules.xml.wsdl.model
+
+
+
+ 1
+ 1.2
+
+
+
+ org.netbeans.modules.xml.xam
+
+
+
+ 1
+ 1.2
+
+
+
+ org.openide.util
+
+
+
+ 7.9.0.1
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/suite.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/suite.properties
new file mode 100644
index 000000000..364e160e1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/suite.properties
@@ -0,0 +1 @@
+suite.dir=${basedir}/..
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/pom.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/pom.xml
new file mode 100644
index 000000000..6d46b589f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/pom.xml
@@ -0,0 +1,95 @@
+
+
+
+ 4.0.0
+ ${groupId}
+ ${artifactId}
+ jar
+ ${version}
+ JBI Component[BindingComponent]
+ Maven project for JBI Component that contains the
+ maven and netbeans build setup and component code to build and test the JBI Component.
+ http://open-esb.org
+
+ build
+ src/java
+ test/java
+ build/classes
+ build/test/classes
+ package
+
+
+
+ maven-antrun-plugin
+ 1.2
+
+
+ default-cli
+
+ run
+
+
+
+ !!!!!!!!!!!!!!!!!!!!!! Moving Files and organizing package !!!!!!!!!!!!!!!!!!!!!!!!
+
+ !!!!!!!!!!!!!!!!!!!!!! Moving Files and organizing package completed successfully!!!!!!!!!!!!!!!!!!!!!!!!
+
+
+
+
+
+
+
+ ant
+ ant-nodeps
+ 1.6.5
+
+
+ ant
+ ant-junit
+ 1.6.5
+ test
+
+
+ junit
+ junit
+ 3.8.2
+ test
+
+
+
+
+
+
+
+ ant
+ ant-nodeps
+ 1.6.5
+
+
+ ant
+ ant-junit
+ 1.6.5
+ test
+
+
+ junit
+ junit
+ 3.8.2
+ test
+
+
+ org.apache.maven
+ maven-ant-tasks
+ 2.0.7
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider
new file mode 100644
index 000000000..5d706f033
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.bindingsupport.spi.ExtensibilityElementTemplateProvider
@@ -0,0 +1 @@
+cname.template.WSDLExtTemplateProvider
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.model.spi.ElementFactory b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.model.spi.ElementFactory
new file mode 100644
index 000000000..90f3ddb3c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.model.spi.ElementFactory
@@ -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
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.validator.spi.ValidatorSchemaFactory b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.validator.spi.ValidatorSchemaFactory
new file mode 100644
index 000000000..5caf7af1f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.wsdl.validator.spi.ValidatorSchemaFactory
@@ -0,0 +1 @@
+cname.validator.WSDLExtValidatorSchemaFactory
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.xam.spi.Validator b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.xam.spi.Validator
new file mode 100644
index 000000000..695264745
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.modules.xml.xam.spi.Validator
@@ -0,0 +1,2 @@
+cname.validator.WSDLExtValidator
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/BindingComponentWsdlExt.xsd b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/BindingComponentWsdlExt.xsd
new file mode 100644
index 000000000..9e9dcb129
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/BindingComponentWsdlExt.xsd
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+ "binding" defines a protocol based binding details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "operation" defines the protocol based binding operation details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "input" defines the protocol based binding input details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "output" defines the protocol based binding output details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "fault" defines the protocol based binding fault details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "address" indicates protocol based binding port details.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties
new file mode 100644
index 000000000..44d1bd26e
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties
@@ -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
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml
new file mode 100644
index 000000000..7b545db1e
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/BindingExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/BindingExt.java
new file mode 100644
index 000000000..3d50c6f9e
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/BindingExt.java
@@ -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;
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtAttribute.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtAttribute.java
new file mode 100644
index 000000000..58abbf15c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtAttribute.java
@@ -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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtComponent.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtComponent.java
new file mode 100644
index 000000000..cf3f28f42
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtComponent.java
@@ -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;
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtConstants.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtConstants.java
new file mode 100644
index 000000000..3e00176d2
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtConstants.java
@@ -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";
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtElementFactoryProvider.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtElementFactoryProvider.java
new file mode 100644
index 000000000..0d3711cc4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtElementFactoryProvider.java
@@ -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 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 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 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 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 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 getElementQNames() {
+ return Collections.singleton(ExtConstants.QN_PORT_EXT);
+ }
+
+ public WSDLComponent create(WSDLComponent context, Element element) {
+ return new PortExt.PortExtImpl(context.getModel(), element);
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtVisitor.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtVisitor.java
new file mode 100644
index 000000000..606b4da96
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtVisitor.java
@@ -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);
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/FaultExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/FaultExt.java
new file mode 100644
index 000000000..7816822ac
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/FaultExt.java
@@ -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;
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/InputExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/InputExt.java
new file mode 100644
index 000000000..4aeb4fcd7
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/InputExt.java
@@ -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;
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OperationExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OperationExt.java
new file mode 100644
index 000000000..408774e38
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OperationExt.java
@@ -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);
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OutputExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OutputExt.java
new file mode 100644
index 000000000..70c9ff12b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OutputExt.java
@@ -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;
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/PortExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/PortExt.java
new file mode 100644
index 000000000..b2e817bac
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/PortExt.java
@@ -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);
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/binding-ext.png b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/binding-ext.png
new file mode 100644
index 000000000..c378d1276
Binary files /dev/null and b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/binding-ext.png differ
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/fault-ext.png b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/fault-ext.png
new file mode 100644
index 000000000..493433031
Binary files /dev/null and b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/fault-ext.png differ
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/input-ext.png b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/input-ext.png
new file mode 100644
index 000000000..559909e3d
Binary files /dev/null and b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/input-ext.png differ
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/operation-ext.png b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/operation-ext.png
new file mode 100644
index 000000000..5c63b31f7
Binary files /dev/null and b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/operation-ext.png differ
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/output-ext.png b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/output-ext.png
new file mode 100644
index 000000000..559909e3d
Binary files /dev/null and b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/output-ext.png differ
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/port-ext.png b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/port-ext.png
new file mode 100644
index 000000000..a6b7f8415
Binary files /dev/null and b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/port-ext.png differ
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/Bundle.properties
new file mode 100644
index 000000000..6e61ecc5a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/Bundle.properties
@@ -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
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/WSDLExtTemplateProvider.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/WSDLExtTemplateProvider.java
new file mode 100644
index 000000000..dcd434326
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/WSDLExtTemplateProvider.java
@@ -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);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/template.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/template.xml
new file mode 100644
index 000000000..7beeb0eba
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/template.xml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidator.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidator.java
new file mode 100644
index 000000000..3f2119f66
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidator.java
@@ -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 EMPTY_RESULT_ITEM = Collections.emptySet();
+ public static final Set 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 results = new HashSet();
+ HashSet models = new HashSet();
+ 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 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 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 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 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 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 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 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
+ // ));
+ //
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidatorSchemaFactory.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidatorSchemaFactory.java
new file mode 100644
index 000000000..c9fa35498
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidatorSchemaFactory.java
@@ -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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/archetype.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/archetype.properties
new file mode 100644
index 000000000..112db0dc2
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/archetype.properties
@@ -0,0 +1,5 @@
+#Wed Jul 24 14:12:01 IST 2013
+package=it.pkg
+version=0.1-SNAPSHOT
+groupId=archetype.it
+artifactId=basic
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/goal.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/goal.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/pom.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/pom.xml
new file mode 100644
index 000000000..f26510bf0
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/pom.xml
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+ 4.0.0
+
+ open-jbi-components
+ binding-component-ojc-archetype
+ 2.3.0
+ jar
+
+ binding-component-ojc-archetype
+
+
+
+
+ org.apache.maven.archetype
+ archetype-packaging
+ 2.2
+
+
+
+
+
+
+ maven-archetype-plugin
+ 2.2
+
+
+
+
+
+ Top-level Build for filebc-top
+
+ https://open-jbi-components.dev.java.net/filebc-top
+
+
+
+ openesb-release
+ OpenESB repo release
+ http://openesb-dev.org:8081/nexus/content/repositories/openesb-release/
+
+
+ openesb-snapshot
+ OpenESB repo release
+ http://nexus.openesb-dev.org:8081/nexus/content/repositories/openesb-snapshot/
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/META-INF/maven/archetype-metadata.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/META-INF/maven/archetype-metadata.xml
new file mode 100644
index 000000000..886b94d51
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/META-INF/maven/archetype-metadata.xml
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+ ${artifactId}
+
+
+
+
+
+
+
+ nbactions.xml
+
+
+
+
+
+ smvn.bat
+
+
+
+
+
+
+
+
+ src/net
+
+ **/*.java
+ **/*.properties
+
+
+
+
+
+
+ nbactions.xml
+
+
+
+
+
+
+
+ src
+
+ **/*.xml
+
+
+
+
+ src
+
+ **/*.xsd
+
+
+
+
+
+ nbactions.xml
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml
new file mode 100644
index 000000000..b4b786307
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml
@@ -0,0 +1,75 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+
+
+ clean
+
+ *
+
+
+ clean
+
+
+ true
+
+
+
+ build
+
+ *
+
+
+ install
+
+
+ true
+
+
+
+ test
+
+ *
+
+
+ package
+
+
+ false
+
+
+
+ rebuild
+
+ *
+
+
+ clean
+ install
+
+
+ true
+
+
+
+ CUSTOM-testreport
+ testreport
+
+ surefire-report:report-only
+
+
+ true
+
+
+
+ CUSTOM-allreports
+ allreports
+
+ site
+
+
+ true
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml
new file mode 100644
index 000000000..8d7aabb49
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml
@@ -0,0 +1,219 @@
+
+
+
+ build-common
+ open-jbi-components
+ 1.1
+ ../../build-common
+
+ 4.0.0
+ open-jbi-components
+ ${componentName}-jbiadapter
+ ${componentName}-jbiadapter
+ ${version}
+ ${componentName}-jbiadapter description
+
+ sun-${componentName}-binding
+
+
+ bld/test
+
+
+ test
+
+
+ **/*.java
+ **/*.ref
+ **/.*
+ **/*.wsdl
+ **/*.pom
+
+
+
+
+
+ maven-surefire-plugin
+
+
+ true
+
+
+
+ maven-antrun-plugin
+
+
+ ${project.artifactId}-substitute-ant-variables
+ process-test-resources
+
+ run
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${project.artifactId}-ant-junit
+ test
+
+ run
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ maven-jar-plugin
+
+
+
+ ${version}
+ ${componentName}
+
+
+
+
+
+
+
+
+ open-jbi-components
+ componentsl
+
+
+
+ open-jbi-components
+ qos
+
+
+ open-jbi-components
+ compositelock
+
+
+
+ jbicompsplatform
+ compileconf
+ test
+
+
+ jmock
+ jmock
+ test
+
+
+ jmock
+ jmock-cglib
+ test
+
+
+
+
+
+ open-esb
+ jbi-admin-common
+ test
+
+
+ junit
+ junit
+ test
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingComponentLifeCycle.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingComponentLifeCycle.java
new file mode 100644
index 000000000..6c6e56507
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingComponentLifeCycle.java
@@ -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);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerEndpoint.java
new file mode 100644
index 000000000..fffdd22f1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerEndpoint.java
@@ -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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerProxy.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerProxy.java
new file mode 100644
index 000000000..d60d57443
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerProxy.java
@@ -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);
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingInstaller.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingInstaller.java
new file mode 100644
index 000000000..fc6572beb
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingInstaller.java
@@ -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() {
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingNormalizer.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingNormalizer.java
new file mode 100644
index 000000000..1df0a4d62
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingNormalizer.java
@@ -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
+ *
+ *
+ *
+ *
+ * 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 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 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 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 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 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 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);
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderEndpoint.java
new file mode 100644
index 000000000..9c861e4b9
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderEndpoint.java
@@ -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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderProxy.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderProxy.java
new file mode 100644
index 000000000..d611c8383
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderProxy.java
@@ -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 env = new HashMap();
+ 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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingRuntime.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingRuntime.java
new file mode 100644
index 000000000..6eef597b6
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingRuntime.java
@@ -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);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingSUManager.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingSUManager.java
new file mode 100644
index 000000000..ad8dd31b4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingSUManager.java
@@ -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);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingServiceUnit.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingServiceUnit.java
new file mode 100644
index 000000000..0d6d0182c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingServiceUnit.java
@@ -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
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingWSDLProcessor.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingWSDLProcessor.java
new file mode 100644
index 000000000..a262a5bd0
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingWSDLProcessor.java
@@ -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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXEndpointMBean.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXEndpointMBean.java
new file mode 100644
index 000000000..80c6c08ad
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXEndpointMBean.java
@@ -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;
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/AbstractMessageExchangeHandler.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/AbstractMessageExchangeHandler.java
new file mode 100644
index 000000000..d589dbc1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/AbstractMessageExchangeHandler.java
@@ -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());
+ }
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/BasicComponentLifeCycle.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/BasicComponentLifeCycle.java
new file mode 100644
index 000000000..d23330373
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/BasicComponentLifeCycle.java
@@ -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.
+ *
+ * It makes sure that the mininum initialization required for the component
+ * lifecycle is implemented by this class or the classes extending this class.
+ *
+ * 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
+ *
+ * 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
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentInstaller.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentInstaller.java
new file mode 100644
index 000000000..748a57ade
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentInstaller.java
@@ -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 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.");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentRuntime.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentRuntime.java
new file mode 100644
index 000000000..50b0bd3b5
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentRuntime.java
@@ -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 ServiceUnitManager for this component, or
+ * null 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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/DefaultMessageExchangeReceiver.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/DefaultMessageExchangeReceiver.java
new file mode 100644
index 000000000..a64ca5141
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/DefaultMessageExchangeReceiver.java
@@ -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();
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeHandler.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeHandler.java
new file mode 100644
index 000000000..4631b23a1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeHandler.java
@@ -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);
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeListener.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeListener.java
new file mode 100644
index 000000000..7701fc300
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeListener.java
@@ -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);
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeReceiver.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeReceiver.java
new file mode 100644
index 000000000..3efd441f4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeReceiver.java
@@ -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;
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeSupport.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeSupport.java
new file mode 100644
index 000000000..2ebdc602d
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeSupport.java
@@ -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 mListeners;
+ /** handlers that can process the message exchange */
+ private Map mHandlers;
+ /** Creates a new instance of MessageExchangeSupport */
+ public MessageExchangeSupport() {
+ this.mListeners = Collections.synchronizedMap(new HashMap());
+ this.mHandlers = Collections.synchronizedMap(new HashMap());
+ }
+ /**
+ * 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);
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeContext.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeContext.java
new file mode 100644
index 000000000..ac67bb2f1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeContext.java
@@ -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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeHelper.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeHelper.java
new file mode 100644
index 000000000..9f86d1fd4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeHelper.java
@@ -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(""); // 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 =
+ "" +
+ "" + message + "" +
+ "" + stackTrace + "" +
+ "" ;
+ 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());
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/AbstractServiceUnitManager.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/AbstractServiceUnitManager.java
new file mode 100644
index 000000000..7a188abea
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/AbstractServiceUnitManager.java
@@ -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 mSUMap;
+
+ /** Creates a new instance of AbstractSUManager */
+ protected AbstractServiceUnitManager() {
+ this.mSUMap = Collections.synchronizedMap(new HashMap());
+ }
+ /** 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 =
+ "" +
+ " " + componentName + "" +
+ " " +
+ " " +
+ " " + taskId + "" +
+ " " + taskResult + "" +
+ " " + msgType + "" +
+ " " +
+ " " +
+ " SU_MGR_MSG_ID" +
+ " " + mainMsgXmlEsc + "" +
+ " " +
+ " " +
+ exMsgXml +
+ " " +
+ " " +
+ "";
+
+ 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 exList = new ArrayList();
+ 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("");
+ exMsgBuff.append(" " + exLevel + "");
+ exMsgBuff.append(" " + "SU_MGR_EXP_ID");
+ exMsgBuff.append(" " + causeMsg + "");
+ exMsgBuff.append(" ");
+ exMsgBuff.append(" " + causeStackTrace + "");
+ exMsgBuff.append("");
+ ++exLevel;
+ }
+
+ return exMsgBuff.toString();
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ConsumerEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ConsumerEndpoint.java
new file mode 100644
index 000000000..b954fe260
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ConsumerEndpoint.java
@@ -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;
+ }
+
+
+}
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java
new file mode 100644
index 000000000..4102a227e
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java
@@ -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.
+ *
+ * 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;
+ }
+
+}
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ProviderEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ProviderEndpoint.java
new file mode 100644
index 000000000..63a17e906
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ProviderEndpoint.java
@@ -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 ServiceEndpoint 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
+ }
+
+}
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java
new file mode 100644
index 000000000..da9edda8a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java
@@ -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 getProvidedServices();
+
+ Collection 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 mConsumedList;
+ private List mProvidedList;
+ private boolean mIsFor${componentName};
+
+ protected SUDescriptorImpl(boolean isFor${componentName}) {
+ this.mIsFor${componentName} = isFor${componentName};
+ this.mConsumedList = new ArrayList();
+ this.mProvidedList = new ArrayList();
+ }
+
+ protected void addProvidedService(Provides provides) {
+ this.mProvidedList.add(provides);
+ }
+
+ protected void addConsumedService(Consumes consumes) {
+ this.mConsumedList.add(consumes);
+ }
+
+ public Collection getProvidedServices() {
+ // return unmodifiable collection
+ return Collections.unmodifiableCollection(this.mProvidedList);
+ }
+
+ public Collection 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);
+ }
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java
new file mode 100644
index 000000000..5be35c8a3
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java
@@ -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.
+ *
+ * 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}
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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.
+ *
+ * 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 mProviderEndpointMap;
+ /** Map of Endpoint Key to ConsumerEndpoint configurations in this service unit */
+ private Map mConsumerEndpointMap;
+ /** Map of Service Key to the WSDL Definition in this service unit */
+ private Map 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();
+ this.mProviderEndpointMap = new HashMap();
+ this.mConsumerEndpointMap = new HashMap();
+ }
+ /** 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 getProviderEndpoints() {
+ return Collections.unmodifiableCollection(this.mProviderEndpointMap.values());
+ }
+ public ConsumerEndpoint getConsumerEndpoint(String cosumerID) {
+ return this.mConsumerEndpointMap.get(cosumerID);
+ }
+
+ public Collection 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 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();
+
+ WSDLProcessor wsdlProcessor = getWSDLProcessor();
+ List wsdlList = wsdlProcessor.readWSDLs(this.getSURootPath());
+ this.getLogger().fine("Number of wsdl definitions in service unit " + wsdlList.size());
+
+ List services = new ArrayList();
+ 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();
+ this.mConsumerEndpointMap = new HashMap();
+
+ Collection 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 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 initedEndpoints = new ArrayList();
+ List allEndpoints = new ArrayList();
+ 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 activatedEndpoints = new ArrayList();
+ List allEndpoints = new ArrayList();
+ 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 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 allEndpoints = new ArrayList();
+ allEndpoints.addAll(this.getConsumerEndpoints());
+ allEndpoints.addAll(this.getProviderEndpoints());
+ doDeactivateEndpoints(allEndpoints);
+ }
+ /**
+ * invokes clean method on the list of endpoint objects
+ */
+ protected void doCleanEndpoints(List 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 allEndpoints = new ArrayList();
+ 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();
+ }
+
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensibilityElement.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensibilityElement.java
new file mode 100644
index 000000000..7c4e85e5a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensibilityElement.java
@@ -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;
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java
new file mode 100644
index 000000000..63d3c39c9
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java
@@ -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 createSerializers 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 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 createSerializers();
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionSerializer.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionSerializer.java
new file mode 100644
index 000000000..2cd2512cd
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionSerializer.java
@@ -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;
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractNormalizer.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractNormalizer.java
new file mode 100644
index 000000000..1eb2ab533
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractNormalizer.java
@@ -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.
+ *
+ * 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 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 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 getMessagePartsFromJBIWrapper(WSDL11JBIWrapper jbiWrapper, Message wsdlMsg)
+ throws MessagingException, ParserConfigurationException {
+
+ List msgParts = new ArrayList();
+ 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 list of child Element nodes.
+ */
+ protected List getChildElements(Element el) {
+ List list = new ArrayList();
+ 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;
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java
new file mode 100644
index 000000000..550b3085a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java
@@ -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 Component.getServiceDescription.
+ *
+ * AbstractExtensionRegistry by default include this extension serializers in the
+ * registry to read/write this service engine binding type in the wsdl definition.
+ *
+ * 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());
+ }
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDL11JBIWrapper.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDL11JBIWrapper.java
new file mode 100644
index 000000000..20a09646b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDL11JBIWrapper.java
@@ -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
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * @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 mPartConentList = new ArrayList();
+
+ /** 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 partContentList) {
+ this.mPartConentList.addAll(partContentList);
+ }
+ /**
+ * returned the ordered list of part contents.
+ */
+ public List 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 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 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 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);
+ }
+
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java
new file mode 100644
index 000000000..1ed9c058f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java
@@ -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.
+ *
+ * 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.
+ *
+ * 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 createSerializers() {
+ return new ArrayList();
+ }
+ };
+ }
+ /**
+ * @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 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 wsdlList = new ArrayList();
+ 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 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 readWSDLs(String fromDir) throws WSDLException {
+ if ( fromDir == null ) { fromDir = ""; }
+ File wsdlDir = new File(fromDir);
+ if (!wsdlDir.isAbsolute()) {
+ wsdlDir = new File(this.mWsdlDirPath, fromDir);
+ }
+
+ List wsdlFiles = new ArrayList();
+ try {
+ wsdlFiles = listWSDLFiles(wsdlDir, true);
+ } catch (IOException ioEx) {
+ throw new WSDLException("WSDLFileReadError", ioEx.getMessage(),ioEx);
+ }
+
+ List wsdlPaths = new ArrayList();
+ for ( File wsdlFile : wsdlFiles) {
+ wsdlPaths.add(wsdlFile.getAbsolutePath());
+ }
+ Collections.sort(wsdlPaths);
+
+ List wsdlList = new ArrayList();
+ 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 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 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);
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/BindingExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/BindingExt.java
new file mode 100644
index 000000000..159238350
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/BindingExt.java
@@ -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());
+
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/ExtConstants.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/ExtConstants.java
new file mode 100644
index 000000000..c52cc7f2b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/ExtConstants.java
@@ -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";
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/FaultExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/FaultExt.java
new file mode 100644
index 000000000..15b6f199c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/FaultExt.java
@@ -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());
+
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/InputExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/InputExt.java
new file mode 100644
index 000000000..e73d45fb2
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/InputExt.java
@@ -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());
+
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OperationExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OperationExt.java
new file mode 100644
index 000000000..003922f3c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OperationExt.java
@@ -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());
+
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OutputExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OutputExt.java
new file mode 100644
index 000000000..9e1bed459
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OutputExt.java
@@ -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());
+
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/PortExt.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/PortExt.java
new file mode 100644
index 000000000..dafa40b4e
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/PortExt.java
@@ -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());
+
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtHelper.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtHelper.java
new file mode 100644
index 000000000..1e1aed0c8
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtHelper.java
@@ -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 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 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 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 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 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 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);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtension.xsd b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtension.xsd
new file mode 100644
index 000000000..1311a03c9
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtension.xsd
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+ "binding" defines a protocol based binding details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "operation" defines the protocol based binding operation details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "input" defines the protocol based binding input details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "output" defines the protocol based binding output details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "fault" defines the protocol based binding fault details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "address" indicates protocol based binding port details.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtensionRegistry.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtensionRegistry.java
new file mode 100644
index 000000000..71c9c6c7f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtensionRegistry.java
@@ -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
+ * AbstractExtensionRegistry 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 createSerializers() {
+ List list = new ArrayList();
+
+ 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;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/EndpointImplTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/EndpointImplTest.java
new file mode 100644
index 000000000..6d26eb0c7
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/EndpointImplTest.java
@@ -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");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FaultExceptionTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FaultExceptionTest.java
new file mode 100644
index 000000000..de7ba5cec
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FaultExceptionTest.java
@@ -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);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingDeployerTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingDeployerTest.java
new file mode 100644
index 000000000..43aafeb73
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingDeployerTest.java
@@ -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"));
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingLifeCycleTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingLifeCycleTest.java
new file mode 100644
index 000000000..4b2e1d449
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingLifeCycleTest.java
@@ -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);
+
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileDenormalizerTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileDenormalizerTest.java
new file mode 100644
index 000000000..d5434e16f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileDenormalizerTest.java
@@ -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 = "" +
+ " " +
+ " " +
+ " HelloWorld" +
+ " " +
+ " " +
+ "";
+ 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.");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileNormalizerTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileNormalizerTest.java
new file mode 100644
index 000000000..962165fb1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileNormalizerTest.java
@@ -0,0 +1,305 @@
+#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})FileNormalizerTest.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 com.sun.jbi.filebc.util.FileStreamHandler;
+
+import java.io.ByteArrayInputStream;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.xml.namespace.QName;
+import javax.wsdl.Binding;
+import javax.wsdl.Definition;
+import javax.wsdl.Input;
+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.transform.dom.DOMSource;
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileNormalizerTest extends org.jmock.cglib.MockObjectTestCase {
+
+ FileNormalizer instance = null;
+ Mock exchange = mock(MessageExchange.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 message = mock(Message.class);
+ Mock part = mock(Part.class);
+ Mock normalizedMsg = mock(NormalizedMessage.class);
+ QName operationName = QName.valueOf("test");
+ String partname = "";
+ byte[] data = null;
+ ArrayList operations = new ArrayList();
+ ArrayList parts = new ArrayList();
+ HashMap partmap = new HashMap();
+ Map fileOps = new HashMap();
+ FileOperation fileOp = new FileOperation();
+
+ public FileNormalizerTest(String testName) {
+ super(testName);
+ try {
+ instance = new FileNormalizer();
+ } catch (Exception ex) {
+ // let later test detect and fail
+ }
+
+ }
+
+ protected void setUp() throws Exception {
+ normalizedMsg.expects(atLeastOnce()).method("setContent").with(isA(DOMSource.class));
+ 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("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));
+ operation.expects(atLeastOnce()).method("getInput").will(returnValue((Input) input.proxy()));
+ input.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));
+
+ QName portTypeQName = new QName("");
+ fileOps.put(operationName, fileOp);
+ portType.expects(atLeastOnce()).method("getQName").will(returnValue(portTypeQName));
+ endpoint.expects(atLeastOnce()).method("getFileOperations").will(returnValue(fileOps));
+
+ partmap.put("part1", (Part) part.proxy());
+ parts.add((Part) part.proxy());
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of normalize method, of class com.sun.jbi.filebc.FileNormalizer.
+ */
+ public void testNormalizeCase1() throws Exception {
+ System.out.println("Testing normalize case 1.");
+
+ NormalizedMessage result = null;
+
+ //setting up
+ FileMessage fileMessage = new FileMessage();
+ exchange.expects(atLeastOnce()).method("createMessage").will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ message.expects(atLeastOnce()).method("getParts").will(returnValue(partmap));
+ operations.add((Operation) operation.proxy());
+
+ // testing the following case
+ // 1. no matching operation
+ operation.expects(atLeastOnce()).method("getName").will(returnValue("blah"));
+
+ if (instance == null) {
+ fail("Failed to test normalize - normalizer instance not available.");
+ }
+
+ try {
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ null,
+ false);
+ fail("Failed to test normalize - an exception should've been raised by FileNormalizer because no operation name match can be found.");
+ } catch (Exception e) {
+ }
+
+
+ // testing the following case
+ // 1. no part name defined
+ // 2. part element is defined
+
+ operation.expects(atLeastOnce()).method("getName").will(returnValue("test"));
+ 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")));
+ data = "helloWorld".getBytes();
+
+ try {
+ FileStreamHandler streamHandler = new FileStreamHandler(
+ new ByteArrayInputStream(data), false, new byte[0], -1,
+ data.length);
+
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ streamHandler, false);
+ assertTrue(result instanceof NormalizedMessage);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test normalize due to: " + e.getMessage());
+ }
+
+ // testing the following case
+ // 1. no part name defined
+ // 2. part element defined
+ // 3. malformed data
+ data = "helloWorld".getBytes();
+ try {
+ FileStreamHandler streamHandler = new FileStreamHandler(
+ new ByteArrayInputStream(data), false, null, -1,
+ data.length);
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ streamHandler, false);
+ fail("Failed to test normalize - an exception should've been raised by FileNormalizer due to malformed xml data");
+ } catch (Exception e) {
+ }
+
+ // testing the following case
+ // 1. no part name defined
+ // 2. part element defined
+ // 3. invalid data
+ data = "HelloWorld".getBytes();
+ try {
+ FileStreamHandler streamHandler = new FileStreamHandler(
+ new ByteArrayInputStream(data), false, null, -1,
+ data.length);
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ streamHandler, false);
+ fail("Failed to test normalize - an exception should've been raised by FileNormalizer due to data type mismatch");
+ } catch (Exception e) {
+ }
+
+ System.out.print("Successfully tested normalize case 1.");
+ }
+
+ /**
+ * Test of normalize method, of class com.sun.jbi.filebc.FileNormalizer.
+ */
+ public void testNormalizeCase2() throws Exception {
+ System.out.println("Testing normalize case 2.");
+
+ NormalizedMessage result = null;
+
+ //setting up
+ FileMessage fileMessage = new FileMessage();
+ fileMessage.setPart("part1");
+ exchange.expects(atLeastOnce()).method("createMessage").will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ message.expects(atLeastOnce()).method("getPart").with(eq("part1")).will(returnValue((Part) part.proxy()));
+ part.expects(atLeastOnce()).method("getElementName").will(returnValue(null));
+ operation.expects(atLeastOnce()).method("getName").will(returnValue("test"));
+ operations.add((Operation) operation.proxy());
+
+ // testing the following case
+ // 1. part name is defined
+ // 2. part type is a complex type
+
+ part.expects(atLeastOnce()).method("getName").will(returnValue("part1"));
+ part.expects(atLeastOnce()).method("getTypeName").will(returnValue(QName.valueOf("testType")));
+ data = "helloWorld".getBytes();
+
+ if (instance == null) {
+ fail("Failed to test normalize - normalizer instance not available.");
+ }
+
+ try {
+ FileStreamHandler streamHandler = new FileStreamHandler(
+ new ByteArrayInputStream(data), false, new byte[0], -1,
+ data.length);
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ streamHandler, false);
+ assertTrue(result instanceof NormalizedMessage);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test normalize due to: " + e.getMessage());
+ }
+
+ // testing the following case
+ // 1. part name
+ // 2. malformed data
+ data = "helloWorld".getBytes();
+ try {
+ FileStreamHandler streamHandler = new FileStreamHandler(
+ new ByteArrayInputStream(data), false, new byte[0], -1,
+ data.length);
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ streamHandler, false);
+ fail("Failed to test normalize - an exception should've been raised by FileNormalizer due to malformed xml data");
+ } catch (Exception e) {
+ }
+
+ // testing the following case
+ // 1. part name defined
+ // 2. simple type
+ part.expects(atLeastOnce()).method("getTypeName").will(returnValue(new QName("http://www.w3.org/2001/XMLSchema", "string")));
+ data = "HelloWorld".getBytes();
+ try {
+ FileStreamHandler streamHandler = new FileStreamHandler(
+ new ByteArrayInputStream(data), false, new byte[0], -1,
+ data.length);
+ result = instance.normalize((MessageExchange) exchange.proxy(),
+ operationName,
+ (Endpoint) endpoint.proxy(),
+ fileMessage,
+ streamHandler, false);
+
+ } catch (Exception e) {
+ fail("Failed to test normalize due to: " + e.getMessage());
+ }
+
+ System.out.print("Successfully tested normalize case 2.");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundMessageProcessorTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundMessageProcessorTest.java
new file mode 100644
index 000000000..4bbef468c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundMessageProcessorTest.java
@@ -0,0 +1,1565 @@
+#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})InboundMessageProcessorTest.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.FileOperation;
+import com.sun.jbi.filebc.extensions.FileAddress;
+import com.sun.jbi.filebc.extensions.FileInput;
+import com.sun.jbi.filebc.extensions.FileOutput;
+import com.sun.jbi.filebc.extensions.FileMessage;
+import com.sun.jbi.common.qos.messaging.MessagingChannel;
+
+import com.sun.jbi.filebc.util.FileUtil;
+import com.sun.jbi.filebc.util.InputFilenameFilter;
+import com.sun.jbi.filebc.util.InputDirFilter;
+
+import java.io.File;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.messaging.DeliveryChannel;
+import javax.jbi.messaging.InOnly;
+import javax.jbi.messaging.InOut;
+import javax.jbi.messaging.ExchangeStatus;
+import javax.jbi.messaging.MessageExchange;
+import javax.jbi.messaging.MessageExchangeFactory;
+import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.xml.namespace.QName;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.util.UUID;
+import java.util.concurrent.LinkedBlockingQueue;
+import javax.wsdl.Binding;
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class InboundMessageProcessorTest extends org.jmock.cglib.MockObjectTestCase {
+
+ static final QName THE_OPERATION = new QName("myoperation");
+ private static final String strEPName = "myEndpointName";
+ private static final String strServiceName = "myServiceName";
+ static final QName THE_SERVICE = new QName(strServiceName);
+ static final String THE_ENDPOINT = strEPName;
+ static final int THE_TYPE = 0;
+ InboundMessageProcessor instance = null;
+ IBFileWorker worker = null;
+ Map services = null;
+ Mock deliveryChannel = null;
+ Mock componentContext = null;
+ Mock endpoint = null;
+ Mock endpointStatus = null;
+ Mock serviceEndpoint = null;
+ Mock msgExchange = null;
+ Mock msgExchangeFactory = null;
+ Mock normalizer = null;
+ Mock normalizedMsg = null;
+ Mock wsdlDefinition = null;
+ Mock service = null;
+ Mock port = null;
+ Mock portType = null;
+ Mock binding = null;
+ Map operations = new HashMap();
+ Map operationMeps = new HashMap();
+ File mWorkAreaBaseDir;
+ int maxCC = 5;
+
+ public InboundMessageProcessorTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ componentContext = mock(ComponentContext.class);
+ deliveryChannel = mock(MessagingChannel.class);
+ endpoint = mock(Endpoint.class);
+ endpointStatus = mock(EndpointStatus.class);
+ serviceEndpoint = mock(ServiceEndpoint.class);
+ msgExchangeFactory = mock(MessageExchangeFactory.class);
+ msgExchange = mock(MessageExchange.class);
+ normalizer = mock(FileNormalizer.class);
+ normalizedMsg = mock(NormalizedMessage.class);
+ wsdlDefinition = mock(Definition.class);
+ service = mock(Service.class);
+ port = mock(Port.class);
+ portType = mock(PortType.class);
+ binding = mock(Binding.class);
+
+ services = new HashMap();
+ services.put(THE_SERVICE, (Service) service.proxy());
+
+ String epUUID = "IB".concat(UUID.nameUUIDFromBytes(strServiceName.concat(strEPName).getBytes()).toString());
+ endpoint.expects(atLeastOnce()).method("getEPUUID").will(returnValue(epUUID));
+ endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(atLeastOnce()).method("getDefinition").will(returnValue(wsdlDefinition.proxy()));
+ wsdlDefinition.expects(atLeastOnce()).method("getServices").will(returnValue((Map) services));
+ 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("getQName").will(returnValue(QName.valueOf("portType1")));
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+
+ FileComponentContext.getInstance().setBindingChannel((MessagingChannel) deliveryChannel.proxy());
+
+ //String key = strServiceName + strEPName;
+ String baseWorkDir = "test/com/sun/jbi/filebc/input/" + strServiceName + "/" + strEPName;
+ mWorkAreaBaseDir = new File(baseWorkDir);
+ mWorkAreaBaseDir.mkdirs();
+ String lockFilePath = baseWorkDir + File.separator + "filebc.lck";
+
+ File lockFile = new File(lockFilePath);
+ lockFile.createNewFile();
+ FileOutputStream fos = new FileOutputStream(lockFile);
+ LockRegistry.register(epUUID, new Lock((fos != null ? fos.getChannel() : null), new ReentrantLock(), lockFilePath));
+
+ instance = new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ (Endpoint) endpoint.proxy(),
+ THE_OPERATION,5);
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(InboundMessageProcessorTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of run method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange pattern is not valid
+ */
+ public void testRunInvalidMEP() {
+ System.out.println("Testing run() for the scenario where the message exchange pattern is not valid");
+
+ FileOperation fileoperation = new FileOperation();
+ operations.put(THE_OPERATION, fileoperation);
+
+ FileInput fileInput = new FileInput();
+ fileInput.setFileMessage(new FileMessage());
+ fileoperation.setFileOperationInput(fileInput);
+
+ FileAddress addr = new FileAddress();
+ addr.setFileDirectory("test/com/sun/jbi/filebc/input");
+ endpoint.expects(atMostOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(atLeastOnce()).method("getFileOperations").will(returnValue(operations));
+ endpoint.expects(atLeastOnce()).method("getOperationMsgExchangePattern").will(returnValue(operationMeps));
+
+ // 1. testing the case where message exchange pattern is not found (null)
+ operationMeps.remove(THE_OPERATION);
+ operationMeps.put("dummyOperation", "inonly");
+
+ instance.stopReceiving();
+ // for junit testing - avoid multiple inbound worker threads
+ instance.run();
+
+ // 2. testing the case where message exchange status is invalid (not inonly or inout)
+ operationMeps.put(THE_OPERATION, "outin");
+ instance.run();
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where basic file extensibility element attribute validation fails.
+ */
+ public void testValidateInboundMessageProperties() {
+ System.out.println("Testing basic runtime wsdl validation");
+
+ String mep = "outin";
+ FileOperation operation = new FileOperation();
+ FileInput fileInput = new FileInput();
+ FileOutput fileOutput = new FileOutput();
+ FileMessage fileMessage = new FileMessage();
+
+ // testing an invalid mep
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to invalid message exchange pattern: " + mep);
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties with an invalid message exchange pattern: " + mep);
+ }
+
+ // testing another invalid mep
+ mep = "unsupported";
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to invalid message exchange pattern: " + mep);
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties with an invalid message exchange pattern: " + mep);
+ }
+
+ mep = "inonly";
+ // testing null input properties
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to null File Input properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties with null File Input properties.");
+ }
+
+ // testing null File read properties
+ operation.setFileOperationInput(fileInput);
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to null File Read properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties with null File Read properties.");
+ }
+
+ // testing missing required File Read attributes
+ operation.setFileOperationInput(fileInput);
+ fileInput.setFileMessage(fileMessage);
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to missing required File Read attribute: pollingMillis.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties: missing required File Read attribute: pollingMillis.");
+ }
+
+ operation.setFileOperationInput(fileInput);
+ fileInput.setFileMessage(fileMessage);
+ fileMessage.setPollingInterval(new Long(5000));
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to missing required File Read attribute: fileName.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties: missing required File Read attribute: fileName.");
+ }
+
+ // testing invalid File Read attribute value
+ fileMessage.setFileType("stream");
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to invalid File Read attribute value: fileType is stream.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties: invalid File Read attribute value: fileType is stream.");
+ }
+
+ // testing with in-out mep
+ // testing with null File output properties
+ mep = "inout";
+ operation.setFileOperationOutput(fileOutput);
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to null File Output properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties with null File Output properties.");
+ }
+
+ // testing missing required File write attributes
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to undefined fileName attribute when fileNameIsPattern is false.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties when fileName is not defined and fileNameIsPattern is false.");
+ }
+
+ fileMessage.setFileNameIsPattern(Boolean.TRUE);
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to undefined filePrefix and fileExtension attributes when fileNameIsPattern is true.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties when both filePrefix and fileExtension are not defined and fileNameIsPattern is true.");
+ }
+
+ // testing invalid File Write attribute value
+ fileMessage.setFileType("undefined");
+ try {
+ instance.validateInboundMessageExchangeProperties(operation, mep);
+ fail("Failed to test validateInboundMessageProperties - an exception should be raised due to invalid File Write attribute value: fileType is undefined.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateInboundMessageProperties: invalid File Write attribute value: fileType is undefined.");
+ }
+
+ System.out.println("Successfully tested basic runtime wsdl validation");
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange type is inonly.
+ */
+ public void testExecuteInOnlyExchangeCase1() {
+ System.out.println("Testing in-only message exchange case 1...");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress fileAddress = new FileAddress();
+ msgExchange = mock(InOnly.class);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input");
+
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ // after cluster support changes
+ // processed files are no longer marked just as _processed and still stay at the same directory
+ // instead, it is either deleted (if archive = false) or UUID tagged and _processed suffixed as _processed and
+ // moved to archive directory (if archive = true)
+ // keep it here - in case in some test context inheritated from past - this file can be removed
+ // before test starts
+ String inputFile = fileAddress.getFileDirectory().concat("/InputInOnly.txt");
+ String testFile = fileAddress.getFileDirectory().concat("/TestInputInOnly.txt");
+
+ // endpoint specific archive, tmp and errDir
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ // after cluster support changes, the error marked files are kept in working area - default location is /filebc-in-processing
+ // the file name looks like: _error
+ // create the lock for inbound
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to create input file to test execute for InOnly message exchanges: ");
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOnly message exchanges: ");
+
+ // Testing the following scenario
+ // 1. no file name match pattern
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+
+ fileMessage.setFileName("TestInputInOnly.txt");
+ fileMessage.setPollingInterval(new Long(5000));
+ fileMessage.setFileNameIsRegex(Boolean.FALSE);
+ fileInput.setFileMessage(fileMessage);
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOnlyExchange").will(returnValue((InOnly) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(once()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(once()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(once()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(once()).method("send").with(eq(msgExchange.proxy()));
+ endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpoint.expects(once()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpointStatus.expects(once()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(once()).method("getServiceQuality");
+
+ // NM Properties related expectations
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = /*new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false)*/ null;
+
+ instance.addWorker(worker = new IBFileWorker(instance, "inonly", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.setFiles(new LinkedBlockingQueue());
+ instance.execute("inonly",
+ fileAddress.getFileDirectory(),
+ "TestInputInOnly.txt",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+
+ Thread.sleep(5000);
+ // since it is a mocked framework - there is no Outbound processor to invoke the replyMessage(...)
+ // which actually do the _processed suffixing and moving the input from work area to archive area
+ // so it is good enough to assert that the UUID tagged input file is in work area
+ assertTrue("Failed to find the input file in tmp dir...", hasFilesWithSuffix(tmpDir, ""));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+
+ verifyContract();
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to create input file to test execute for InOnly message exchanges: ");
+
+ // Testing the following scenario
+ // 1. no file name match pattern
+ // 2. Unsuccessful "normalization"
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOnly message exchanges: ");
+
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(throwException(new Exception("Failed to normalize")));
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = /*new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false)*/ null;
+
+ instance.setWorkers(null);
+ instance.addWorker(worker = new IBFileWorker(instance, "inonly", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.execute("inonly",
+ fileAddress.getFileDirectory(),
+ "TestInputInOnly.txt",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ // now there are worker threads spin off by execute(), the exception "Failed to normalize" is thrown
+ // in the run method of IBFileWorker and is captured and logged and
+ // the offending message is marked as _error and will stay in the
+ // work area - tmp dir
+ // the next best assertion for this scenario is to assert that the _error file is there
+ assertTrue("Failed to find the _error suffixed input file in error dir...", hasFilesWithSuffix(errDir, FileUtil.getErrorFileSuffix()));
+ //fail("Failed to test in-only message exchange when an expected exception should be caught");
+ } catch (Exception e) {
+// System.out.println("Caught the expected exception!!");
+ fail("Failed to test execute for InOnly message exchanges with Exception 'Failed to normalize': " + e.getMessage());
+ }
+ verifyContract();
+ System.out.println("Successfully tested in-only message exchange case 1");
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange type is inonly.
+ */
+ public void testExecuteInOnlyExchangeCase2() {
+ System.out.println("Testing in-only message exchange case 2...");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress fileAddress = new FileAddress();
+ msgExchange = mock(InOnly.class);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input");
+
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ // after cluster support changes
+ // processed files are no longer marked just as _processed and still stay at the same directory
+ // instead, it is either deleted (if archive = false) or UUID tagged and _processed suffixed as _processed and
+ // moved to archive directory (if archive = true)
+ String inputFile = fileAddress.getFileDirectory().concat("/InputInOnly.txt");
+ String testFile = fileAddress.getFileDirectory().concat("/I8n.dat");
+
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOnly message exchanges: ");
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOnly message exchanges: ");
+
+ // Testing the following scenario
+ // 1. file name is pattern
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+ fileMessage.setFileName("Input%u.txt");
+ fileMessage.setPollingInterval(new Long(5000));
+ fileInput.setFileMessage(fileMessage);
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOnlyExchange").will(returnValue((InOnly) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(once()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(once()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(once()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(once()).method("send").with(eq(msgExchange.proxy()));
+ //endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(once()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointStatus.expects(once()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(once()).method("getServiceQuality");
+
+ // NM Properties related expectations
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false);
+
+ instance.addWorker(worker = new IBFileWorker(instance, "inonly", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.setFiles(new LinkedBlockingQueue());
+ fileFilter.setFilterExpression("I%dn.dat");
+ instance.execute("inonly",
+ fileAddress.getFileDirectory(),
+ "I%dn.dat",
+ Boolean.TRUE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ assertTrue("Failed to find the input file in tmp dir...", hasFilesWithSuffix(tmpDir, ""));
+ } catch (Exception e) {
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+
+ verifyContract();
+
+ // Testing the following scenario
+ // 1. file name is pattern
+ // 2. Unsuccessful "normalization"
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOnly message exchanges: ");
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOnly message exchanges: ");
+
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(throwException(new Exception("Failed to normalize")));
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = new InputDirFilter("");
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false);
+
+ instance.setWorkers(null);
+ instance.addWorker(worker = new IBFileWorker(instance, "inonly", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ fileFilter.setFilterExpression("I%dn.dat");
+ instance.execute("inonly",
+ fileAddress.getFileDirectory(),
+ "I%dn.dat",
+ Boolean.TRUE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ // now there are worker threads spin off by execute(), the exception "Failed to normalize" is thrown
+ // in the run method of IBFileWorker and is captured and logged and
+ // the offending message is marked as _error and will stay in the
+ // work area - tmp dir
+ // the next best assertion for this scenario is to assert that the _error file is there
+ assertTrue("Failed to find the _error suffixed input file in error dir...", hasFilesWithSuffix(errDir, FileUtil.getErrorFileSuffix()));
+ //fail("Failed to test in-only message exchange when an expected exception should be caught");
+ } catch (Exception e) {
+ fail("Failed to test execute for InOnly message exchanges with Exception 'Failed to normalize': " + e.getMessage());
+ //System.out.println("Caught the expected exception!!");
+ }
+ verifyContract();
+ System.out.println("Successfully tested in-only message exchange case 2");
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange type is inonly.
+ */
+ public void testExecuteInOnlyExchangeCase3() {
+ System.out.println("Testing in-only message exchange case 3...");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress fileAddress = new FileAddress();
+ msgExchange = mock(InOnly.class);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input/test_recursive_root_inonly_1");
+
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOnly message exchanges: ");
+
+ copy(new File("test/com/sun/jbi/filebc/input/recursive_root_inonly"), new File(fileAddress.getFileDirectory()));
+
+ // Testing the following scenario
+ // 1. file name is pattern and the poll is recursive
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+ fileAddress.setRecursive(Boolean.TRUE);
+ fileAddress.setExcludeRegex(".*_skip_.*");
+ fileMessage.setFileName("InputInOnly[0-9]+[a-zA-Z_]*${symbol_escape}${symbol_escape}.txt");
+ fileMessage.setPollingInterval(new Long(5000));
+ fileMessage.setFileNameIsRegex(Boolean.TRUE);
+ fileInput.setFileMessage(fileMessage);
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOnlyExchange").will(returnValue((InOnly) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(atLeastOnce()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(atLeastOnce()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(atLeastOnce()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(atLeastOnce()).method("send").with(eq(msgExchange.proxy()));
+ //endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(atLeastOnce()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointStatus.expects(atLeastOnce()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(atLeastOnce()).method("getServiceQuality");
+
+ // NM Properties related expectations
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(0);
+ InputDirFilter dirFilter = new InputDirFilter(fileAddress.getExcludeRegex());
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileMessage.getFileName(),
+ fileAddress.getExcludeRegex(),
+ maxFilesPerPoll,
+ fileMessage.getFileNameIsRegex());
+
+ instance.addWorker(worker = new IBFileWorker(instance, "inonly", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.setFiles(new LinkedBlockingQueue());
+ while (true) {
+ boolean yield = instance.execute("inonly",
+ fileAddress.getFileDirectory(),
+ "when file filter is not null put anything here is OK - it is not used",
+ Boolean.TRUE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ if (yield) {
+ Thread.sleep(50);
+ } else {
+ break;
+ }
+ }
+ Thread.sleep(30000);
+ instance.setStopped(true); // signal the workers to shutdown
+ // may want to check the total files staged - should equal the
+ // matched input files from base dir and all sub dirs that are not excluded
+ int cnt = count(tmpDir);
+ assertTrue("Failed to find the expected number of input file in tmp dir [25 expected]...count=" + cnt, cnt == 25);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+ instance.setWorkers(null);
+ verifyContract();
+
+ System.out.println("Successfully tested in-only message exchange case 3");
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange type is inout.
+ */
+ public void testExecuteInOutExchangeCase1() {
+ System.out.println("Testing in-out message exchange case 1...");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress fileAddress = new FileAddress();
+ msgExchange = mock(InOut.class);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input");
+
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ // after cluster support changes
+ // processed files are no longer marked just as _processed and still stay at the same directory
+ // instead, it is either deleted (if archive = false) or UUID tagged and _processed suffixed as _processed and
+ // moved to archive directory (if archive = true)
+ String inputFile = fileAddress.getFileDirectory().concat("/InputInOut.txt");
+ String testFile = fileAddress.getFileDirectory().concat("/TestInputInOut.txt");
+
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOut message exchanges: ");
+
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOut message exchanges: ");
+
+ // Testing the following scenario
+ // 1. no file name match pattern
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+
+ fileMessage.setFileName("TestInputInOut.txt");
+ fileMessage.setPollingInterval(new Long(5000));
+ fileInput.setFileMessage(fileMessage);
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOutExchange").will(returnValue((InOut) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(once()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(once()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(once()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(once()).method("send").with(eq(msgExchange.proxy()));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(once()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointStatus.expects(once()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(once()).method("getServiceQuality");
+
+ // NM Properties related expectations
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = /*new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false)*/ null;
+
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.setFiles(new LinkedBlockingQueue());
+ instance.execute("inout",
+ fileAddress.getFileDirectory(),
+ "TestInputInOut.txt",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ assertTrue("Failed to find the input file in tmp dir...", hasFilesWithSuffix(tmpDir, ""));
+ } catch (Exception e) {
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+ verifyContract();
+
+ // Testing the following scenario
+ // 1. no file name match pattern
+ // 2. Unsuccessful "normalization"
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOut message exchanges: ");
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOut message exchanges: ");
+
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(throwException(new Exception("Failed to normalize")));
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = /*new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false)*/ null;
+
+ instance.setWorkers(null);
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.execute("inout",
+ fileAddress.getFileDirectory(),
+ "TestInputInOut.txt",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+
+ Thread.sleep(5000);
+ // now there are worker threads spin off by execute(), the exception "Failed to normalize" is thrown
+ // in the run method of IBFileWorker and is captured and logged and
+ // the offending message is marked as _error and will stay in the
+ // work area - tmp dir
+ // the next best assertion for this scenario is to assert that the _error file is there
+ assertTrue("Failed to find the _error suffixed input file in error dir...", hasFilesWithSuffix(errDir, FileUtil.getErrorFileSuffix()));
+ //fail("Failed to test in-out message exchange when an expected exception should be caught");
+ } catch (Exception e) {
+ fail("Failed to test execute for In-Out message exchanges with Exception 'Failed to normalize': " + e.getMessage());
+ //System.out.println("Caught the expected exception!!");
+ }
+ verifyContract();
+ System.out.println("Successfully tested in-out message exchange case 1");
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange type is inout.
+ */
+ public void testExecuteInOutExchangeCase3() {
+ System.out.println("Testing in-out message exchange case 3...");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress fileAddress = new FileAddress();
+ msgExchange = mock(InOut.class);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input/test_recursive_root_inout_1");
+
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOut message exchanges: ");
+
+ copy(new File("test/com/sun/jbi/filebc/input/recursive_root_inout"), new File(fileAddress.getFileDirectory()));
+
+ // Testing the following scenario
+ // 1. file name is regular expression and the poll is recursive with exclude regex
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+
+ fileAddress.setRecursive(Boolean.TRUE);
+ fileAddress.setExcludeRegex(".*_skip_.*");
+ fileMessage.setFileName("InputInOut[0-9]+[a-zA-Z_]*${symbol_escape}${symbol_escape}.dat");
+ fileMessage.setFileNameIsRegex(Boolean.TRUE);
+ fileMessage.setPollingInterval(new Long(5000));
+ fileInput.setFileMessage(fileMessage);
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOutExchange").will(returnValue((InOut) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(atLeastOnce()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(atLeastOnce()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(atLeastOnce()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(atLeastOnce()).method("send").with(eq(msgExchange.proxy()));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(atLeastOnce()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointStatus.expects(atLeastOnce()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(atLeastOnce()).method("getServiceQuality");
+
+ // NM Properties related expectations
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(0);
+ InputDirFilter dirFilter = new InputDirFilter(fileAddress.getExcludeRegex());
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileMessage.getFileName(),
+ fileAddress.getExcludeRegex(),
+ maxFilesPerPoll,
+ fileMessage.getFileNameIsRegex());
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setFiles(new LinkedBlockingQueue());
+ while (true) {
+ boolean yield = instance.execute("inout",
+ fileAddress.getFileDirectory(), // the base dir to be polled (recursively)
+ "when file filter is not null put anything here is OK - it is not used",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ if (yield) {
+ Thread.sleep(50);
+ } else {
+ break;
+ }
+ }
+ Thread.sleep(30000);
+ instance.setStopped(true); // signal the workers to shutdown
+ // may want to check the total files staged - should equal the
+ // matched input files from base dir and all sub dirs that are not excluded
+ int cnt = count(tmpDir);
+ assertTrue("Failed to find the expected number of input file in tmp dir [25 expected]...count=" + cnt, cnt == 25);
+ } catch (Exception e) {
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+
+ verifyContract();
+
+ // Testing the following scenario
+ // 1. file name is pattern, poll is recursive
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOut message exchanges: ");
+ instance.setWorkers(null);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input/test_recursive_root_inout_2");
+
+ fileMessage.setFileName("InputInOut%d.dat");
+ fileMessage.setFileNameIsRegex(Boolean.FALSE);
+ fileMessage.setFileNameIsPattern(Boolean.TRUE);
+
+ copy(new File("test/com/sun/jbi/filebc/input/recursive_root_inout"), new File(fileAddress.getFileDirectory()));
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(0);
+ InputDirFilter dirFilter = new InputDirFilter(fileAddress.getExcludeRegex());
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileMessage.getFileName(),
+ fileAddress.getExcludeRegex(),
+ maxFilesPerPoll,
+ fileMessage.getFileNameIsRegex().booleanValue());
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setFiles(new LinkedBlockingQueue());
+ while (true) {
+ boolean yield = instance.execute("inout",
+ fileAddress.getFileDirectory(), // the base dir to be polled (recursively)
+ "when file filter is not null put anything here is OK - it is not used",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ if (yield) {
+ Thread.sleep(50);
+ } else {
+ break;
+ }
+ }
+ Thread.sleep(30000);
+ instance.setStopped(true); // signal the workers to shutdown
+ int cnt = count(tmpDir);
+ assertTrue("Failed to find the expected number of input file in tmp dir [25 expected]...count=" + cnt, cnt == 25);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+
+ verifyContract();
+ System.out.println("Successfully tested in-out message exchange case 3");
+ }
+
+ /**
+ * Test of execute method, of class com.sun.jbi.filebc.InboundMessageProcessor
+ * for the scenario where the message exchange type is inout.
+ */
+ public void testExecuteInOutExchangeCase2() {
+ System.out.println("Testing in-out message exchange case 2...");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress fileAddress = new FileAddress();
+ msgExchange = mock(InOut.class);
+
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input");
+
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ // after cluster support changes
+ // processed files are no longer marked just as _processed and still stay at the same directory
+ // instead, it is either deleted (if archive = false) or UUID tagged and _processed suffixed as _processed and
+ // moved to archive directory (if archive = true)
+ String inputFile = fileAddress.getFileDirectory().concat("/InputInOut.txt");
+ String testFile = fileAddress.getFileDirectory().concat("/I8n.dat");
+
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOut message exchanges: ");
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOut message exchanges: ");
+
+ // Testing the following scenario
+ // 1. no file name match pattern
+ // 2. successful "normalization"
+ // 3. successful msgexchange.send
+
+ fileMessage.setFileName("[A-Z][0-9]n.[a-e]a[t-z]");
+ fileMessage.setPollingInterval(new Long(5000));
+ fileInput.setFileMessage(fileMessage);
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOutExchange").will(returnValue((InOut) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(once()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(once()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(once()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(once()).method("send").with(eq(msgExchange.proxy()));
+ //endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(once()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointStatus.expects(once()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(once()).method("getServiceQuality");
+
+ // NM Properties related expectations
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, true);
+
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.setFiles(new LinkedBlockingQueue());
+ fileFilter.setFilterExpression("I%dn.dat");
+ instance.execute("inout",
+ fileAddress.getFileDirectory(),
+ "I%dn.dat",
+ Boolean.TRUE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+
+ Thread.sleep(5000);
+ assertTrue("Failed to find the input file in tmp dir...", hasFilesWithSuffix(tmpDir, ""));
+ } catch (Exception e) {
+ fail("Failed to test InOnly exchanges due to: " + e.getMessage());
+ }
+ verifyContract();
+
+ // Testing the following scenario
+ // 1. no file name match pattern
+ // 2. Unsuccessful "normalization"
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test execute for InOut message exchanges: ");
+ validateAndPrepareTestFiles(inputFile, testFile, "Failed to create input file to test execute for InOut message exchanges: ");
+
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(throwException(new Exception("Failed to normalize")));
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, true);
+
+ instance.setWorkers(null);
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ fileFilter.setFilterExpression("I%dn.dat");
+ instance.execute("inout",
+ fileAddress.getFileDirectory(),
+ "I%dn.dat",
+ Boolean.TRUE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ // now there are worker threads spin off by execute(), the exception "Failed to normalize" is thrown
+ // in the run method of IBFileWorker and is captured and logged and
+ // the offending message is marked as _error and will stay in the
+ // work area - tmp dir
+ // the next best assertion for this scenario is to assert that the _error file is there
+ assertTrue("Failed to find the _error suffixed input file in error dir...", hasFilesWithSuffix(errDir, FileUtil.getErrorFileSuffix()));
+ //fail("Failed to test in-out message exchange when an expected exception should be caught");
+ } catch (Exception e) {
+ fail("Failed to test execute for In-Out message exchanges with Exception 'Failed to normalize': " + e.getMessage());
+ //System.out.println("Caught the expected exception!!");
+ }
+ verifyContract();
+
+ System.out.println("Successfully tested in-out message exchange case 2");
+ }
+
+ /**
+ * Test of processReplyMessage method, of class com.sun.jbi.filebc.InboundMessageProcessor.
+ */
+ public void testProcessReplyMessage() {
+ System.out.println("Testing processReplyMessage");
+
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+
+ fileMessage.setFileName("TestInputInOut.txt");
+ fileMessage.setPollingInterval(new Long(5000));
+ fileInput.setFileMessage(fileMessage);
+
+ FileAddress fileAddress = new FileAddress();
+ fileAddress.setFileDirectory("test/com/sun/jbi/filebc/input");
+ fileAddress.setLockName(Lock.DEFAULT_INBOUND_LOCKFILE_NAME);
+ fileAddress.setWorkArea(Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ fileAddress.setSeqName(Lock.DEFAULT_SEQFILE_NAME);
+
+ Map inboundReplys = new HashMap();
+ Map Ids = new HashMap();
+
+ msgExchange = mock(MessageExchange.class);
+ msgExchange.stubs().method("getPattern");
+
+ // testing invalid message exchange
+ try {
+ instance.processReplyMessage((MessageExchange) msgExchange.proxy());
+ fail("Failed to test processReplyMessage when an validation exception should be caught.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested processReply when the MessageExchange is neither in-out nor in-only");
+ }
+
+ // testing no exchangeId found
+ msgExchange = mock(InOut.class);
+ msgExchange.expects(once()).method("getExchangeId").will(returnValue("789"));
+ Ids.put("123", "");
+ instance.setInboundExchangeIds(Ids);
+
+ try {
+ instance.processReplyMessage((InOut) msgExchange.proxy());
+ System.out.println("Successfully tested processReply when message exchange ID is not found");
+ } catch (Exception e) {
+ fail("Failed to test processReplyMessage when message exchange ID is not found.");
+ }
+
+ // testing exchang Id is found but status is not DONE
+ String origFile = fileAddress.getFileDirectory().concat("/InputInOut.txt");
+ String inputFile = fileAddress.getFileDirectory().concat("/TestInputInOut.txt");
+
+ String archiveDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + FileMessage.FILE_ARCHIVE_DIR_DEFAULT);
+ String tmpDir = mWorkAreaBaseDir.getAbsolutePath().concat("/" + Lock.DEFAULT_INBOUND_TMPDIR_NAME);
+ String errDir = mWorkAreaBaseDir.getAbsolutePath() + File.separator + FileUtil.DEFAULT_ERRORS_DIR_NAME;
+
+ // after cluster support changes
+ // processed files are no longer marked just as _processed and still stay at the same directory
+ // instead, it is either deleted (if archive = false) or UUID tagged and _processed suffixed as _processed and
+ // moved to archive directory (if archive = true)
+ // now the error marked file stays in tmp directory
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test processReplyMessage: ");
+ validateAndPrepareTestFiles(origFile, inputFile, "Failed to create a input file to properly test processReplyMessage method - ID found and status = DONE: ");
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOutExchange").will(returnValue((InOut) msgExchange.proxy()));
+ componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint) serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(once()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(once()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(once()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(once()).method("send").with(eq(msgExchange.proxy()));
+ //endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpoint.expects(once()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpointStatus.expects(once()).method("incrementSentRequests");
+
+ // QOS: Re-delivery
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(ANYTHING));
+ msgExchange.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(ANYTHING));
+ deliveryChannel.expects(atLeastOnce()).method("getServiceQuality");
+
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // set no throttling
+ endpoint.expects(atLeastOnce()).method("getMaxConcurrencyLimit").will(returnValue(-1));
+
+ endpoint.expects(atLeastOnce()).method("getServiceUnitID");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = /*new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false)*/ null;
+
+ instance.setWorkers(null);
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setFileMessage(fileMessage);
+ instance.setTargetDirectory(fileAddress.getFileDirectory());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.setFiles(new LinkedBlockingQueue());
+ instance.execute("inout",
+ fileAddress.getFileDirectory(),
+ "TestInputInOut.txt",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ assertTrue("Failed to detect a UUID tagged input file in work area - tmp dir when preparing for replyMessage() test [ID found status = DONE]", hasFilesWithSuffix(tmpDir, ""));
+ } catch (Exception e) {
+ fail("Failed to test replyMessage when call InOnly exchanges to prepare some expected files due to: " + e.getMessage());
+ }
+
+ File tmpDirObj = new File(tmpDir);
+ MyFilter myFilter = new MyFilter(fileMessage.getFileName());
+ File[] tmpFiles = tmpDirObj.listFiles(myFilter);
+
+ if (tmpFiles == null || tmpFiles.length == 0) {
+ fail("Failed to test replyMessage due to the UUID tagged input file does not shown up in work area - tmp dir - for [ID found status = DONE]");
+ }
+
+ // testing exchange Id is found and status is DONE
+ FileMeta fileMeta = new FileMeta(tmpFiles[0]);
+ fileMeta.setNMProperty(FileMeta.NMPROP_INBOUND_FILEDIR, tmpDirObj.getAbsolutePath());
+ fileMeta.setNMProperty(FileMeta.NMPROP_INBOUND_FILENAME, tmpFiles[0].getName());
+ inboundReplys.put("123", fileMeta);
+ instance.setInboundReplyIds(inboundReplys);
+ Ids.put("123", "");
+ instance.setInboundExchangeIds(Ids);
+ msgExchange.expects(once()).method("getExchangeId").will(returnValue("123"));
+ msgExchange.expects(once()).method("getStatus").will(returnValue(ExchangeStatus.DONE));
+ try {
+ instance.processReplyMessage((InOut) msgExchange.proxy());
+ Map inboundIds = instance.getInboundExchanges();
+ // the id will be removed after the reply is processed
+ assertTrue("'123' should be removed by now - but it is not", !inboundIds.containsKey("123"));
+ // the processed input file should be moved to archive area with suffix _processed
+ assertTrue("Failed to assert that there is an _processed suffixed file in working area - tmp dir", hasFilesWithSuffix(archiveDir, "_processed"));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test processReplyMessage when message exchange status is DONE.");
+ }
+
+ cleanup(new String[]{archiveDir, tmpDir, errDir}, "Failed to clean up archive directory and filebc-in-processing directory to test processReplyMessage: ");
+ validateAndPrepareTestFiles(origFile, inputFile, "Failed to create a input file to properly test processReplyMessage method: ");
+
+ // provide the UUID tagged file for replyMessage() to do post processing - archive or delete or mark as error
+ //deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory").will(returnValue(msgExchangeFactory.proxy()));
+ msgExchangeFactory.expects(atLeastOnce()).method("createInOutExchange").will(returnValue((InOut) msgExchange.proxy()));
+ //componentContext.expects(atLeastOnce()).method("getEndpoint").with(eq(THE_SERVICE), eq(THE_ENDPOINT)).will(returnValue((ServiceEndpoint)serviceEndpoint.proxy()));
+ msgExchange.expects(atLeastOnce()).method("getExchangeId");
+ normalizer.expects(atLeastOnce()).method("normalize").withAnyArguments().will(returnValue((NormalizedMessage) normalizedMsg.proxy()));
+ msgExchange.expects(once()).method("setEndpoint").with(isA(ServiceEndpoint.class));
+ msgExchange.expects(once()).method("setOperation").with(eq(THE_OPERATION));
+ msgExchange.expects(once()).method("setMessage").with(eq(normalizedMsg.proxy()), eq("in"));
+
+ deliveryChannel.expects(once()).method("send").with(eq(msgExchange.proxy()));
+ //endpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ //endpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpoint.expects(once()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpointStatus.expects(once()).method("incrementSentRequests");
+
+ try {
+ AtomicInteger maxFilesPerPoll = new AtomicInteger(20);
+ InputDirFilter dirFilter = /*new InputDirFilter("")*/ null;
+ InputFilenameFilter fileFilter = /*new InputFilenameFilter(fileInput.getFileMessage().getFileName(), "", maxFilesPerPoll, false)*/ null;
+
+ instance.setWorkers(null);
+ instance.addWorker(worker = new IBFileWorker(instance, "inout", fileMessage,
+ new File(fileAddress.getFileDirectory()), mWorkAreaBaseDir));
+ worker.setNormalizer((FileNormalizer) normalizer.proxy());
+ instance.setFileMessage(fileMessage);
+ instance.setTargetDirectory(fileAddress.getFileDirectory());
+ instance.setLock(createLock(fileAddress.getFileDirectory(), fileAddress.getLockName()));
+ instance.setStopped(true); // let the worker loop once and quit
+ instance.execute("inout",
+ fileAddress.getFileDirectory(),
+ "TestInputInOut.txt",
+ Boolean.FALSE,
+ fileInput,
+ fileAddress,
+ maxFilesPerPoll,
+ fileFilter,
+ dirFilter,maxCC);
+ Thread.sleep(5000);
+ assertTrue("Failed to detect a UUID tagged input file in work area - tmp dir when preparing for replyMessage() test [ID found status != DONE]", hasFilesWithSuffix(tmpDir, ""));
+ } catch (Exception e) {
+ fail("Failed to test replyMessage when call InOnly exchanges to prepare some expected files due to: " + e.getMessage());
+ }
+
+ tmpFiles = tmpDirObj.listFiles(myFilter);
+ if (tmpFiles == null || tmpFiles.length == 0) {
+ fail("Failed to test replyMessage due to the UUID tagged input file does not shown up in work area - tmp dir - for [ID found status != DONE]");
+ }
+
+ fileMeta = new FileMeta(tmpFiles[0]);
+ fileMeta.setNMProperty(FileMeta.NMPROP_INBOUND_FILEDIR, tmpDirObj.getAbsolutePath());
+ fileMeta.setNMProperty(FileMeta.NMPROP_INBOUND_FILENAME, tmpFiles[0].getName());
+ inboundReplys.put("123", fileMeta);
+ instance.setInboundReplyIds(inboundReplys);
+ Ids.put("123", "");
+ instance.setInboundExchangeIds(Ids);
+ msgExchange.expects(once()).method("getExchangeId").will(returnValue("123"));
+ msgExchange.expects(once()).method("getStatus").will(returnValue(ExchangeStatus.ERROR));
+ Mock serviceEndpoint = mock(ServiceEndpoint.class);
+ msgExchange.expects(atLeastOnce()).method("getEndpoint").will(returnValue(serviceEndpoint.proxy()));
+ serviceEndpoint.expects(atLeastOnce()).method("getServiceName");
+ serviceEndpoint.expects(atLeastOnce()).method("getEndpointName");
+ msgExchange.expects(once()).method("getOperation");
+ msgExchange.expects(atLeastOnce()).method("getProperty");
+ msgExchange.expects(once()).method("getError");
+
+ try {
+ instance.processReplyMessage((InOut) msgExchange.proxy());
+ Map inboundIds = instance.getInboundExchanges();
+ assertTrue("Failed to assert that Inbound Exchange ID 123 are removed", !inboundIds.containsKey("123"));
+ // in the tmp directory, there should be the UUID tagged input file with _error suffix
+ assertTrue("Failed to assert that there is an _error suffixed file in error dir", hasFilesWithSuffix(errDir, FileUtil.getErrorFileSuffix()));
+ // processReplyMessage(...) encountered an error and marked input file with _error
+ // accordingly
+ System.out.println("Successfully tested processReply when message exchange status is not DONE.");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test processReplyMessage when message exchange status is not DONE.");
+ }
+
+ System.out.println("Successfully tested processReplyMessage");
+ }
+
+ private void copy(File srcRoot, File destRoot) {
+ if (!srcRoot.exists()) {
+ fail("Original directory does not exist when preparing test data..., src=" + srcRoot + " dest=" + destRoot);
+ }
+ destRoot.mkdirs();
+ File[] entries = srcRoot.listFiles();
+ File entry = null;
+ for (int i = 0; i < entries.length; i++) {
+ entry = entries[i];
+ if (entry.isDirectory()) {
+ copy(entry, new File(destRoot, entry.getName()));
+ } else {
+ copyFile(entry, new File(destRoot, entry.getName()));
+ }
+ }
+ }
+
+ private int count(String dir) {
+ int result = 0;
+ File dirObj = new File(dir);
+ File[] entries = dirObj.listFiles();
+ if (entries != null) {
+ for (int i = 0; i < entries.length; i++) {
+ if (entries[i].isFile()) {
+ result++;
+ }
+ }
+ }
+ return result;
+ }
+
+ private void copyFile(String fromFile, String toFile) {
+ copyFile(new File(fromFile), new File(toFile));
+ }
+
+ private void copyFile(File fromFile, File toFile) {
+ StringBuffer output = new StringBuffer();
+ try {
+ java.io.FileReader reader = new java.io.FileReader(fromFile);
+ char[] buff = new char[512];
+ int len = reader.read(buff);
+ int length = len;
+ while (len > 0) {
+ output.append(buff, 0, len);
+ len = reader.read(buff);
+ }
+ java.io.FileWriter writer = new java.io.FileWriter(toFile);
+ writer.write(buff, 0, length);
+ writer.flush();
+ writer.close();
+ } catch (Exception e) {
+ System.err.println("Failed to copy " + fromFile + " to " + toFile);
+ }
+ }
+
+ private Lock createLock(String dir, String lck) throws Exception {
+ File lf = new File(dir, lck);
+ if (!lf.exists()) {
+ lf.createNewFile();
+ }
+ FileOutputStream fos = new FileOutputStream(lf);
+
+ return new Lock(fos.getChannel(), new ReentrantLock(), lf.getCanonicalPath());
+ }
+
+ private void cleanUpDir(String dir) {
+ // remove all the files under the given directory
+ File d = new File(dir);
+ if (d.exists()) {
+ File[] files = d.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ files[i].delete();
+ }
+ }
+ }
+
+ private boolean hasFilesWithSuffix(String dir, String suffix) {
+ File d = new File(dir);
+ boolean result = false;
+ if (d.exists()) {
+ File[] files = d.listFiles();
+ for (int i = 0; i < files.length; i++) {
+ if (suffix == null && suffix.trim().length() == 0) {
+ result = true;
+ break;
+ }
+ if (files[i].getName().endsWith(suffix)) {
+ result = true;
+ break;
+ }
+ }
+ }
+ return result;
+ }
+
+ private void verifyContract() {
+ msgExchange.verify();
+ msgExchangeFactory.verify();
+ componentContext.verify();
+ endpointStatus.verify();
+ }
+
+ private void cleanup(String[] dirs, String msg) {
+ try {
+ for (int i = 0; i < dirs.length; i++) {
+ cleanUpDir(dirs[i]);
+ }
+ } catch (Exception e) {
+ fail(msg.concat(e.getMessage()));
+ }
+ }
+
+ private void validateAndPrepareTestFiles(String inputFile, String testFile, String msg) {
+ if (!new File(inputFile).exists()) {
+ fail("input file:" + inputFile + " does not exist.");
+ }
+ try {
+ if (!new File(testFile).exists()) {
+ copyFile(inputFile, testFile);
+ }
+ } catch (Exception e) {
+ fail(msg.concat(e.getMessage()));
+ }
+ }
+
+ class MyFilter implements FilenameFilter {
+
+ private String mPrefix;
+
+ public MyFilter(String prefix) {
+ mPrefix = prefix;
+ }
+
+ public boolean accept(File f, String n) {
+ if (n != null && n.startsWith(mPrefix)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundReceiverTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundReceiverTest.java
new file mode 100644
index 000000000..85cd64861
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundReceiverTest.java
@@ -0,0 +1,315 @@
+#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})InboundReceiverTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc;
+
+import com.sun.jbi.component.jbiext.KeyStoreUtilClient;
+import junit.framework.*;
+import com.sun.jbi.filebc.extensions.FileOperation;
+import com.sun.jbi.filebc.util.EPUtil;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.messaging.DeliveryChannel;
+import javax.xml.namespace.QName;
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class InboundReceiverTest extends org.jmock.cglib.MockObjectTestCase {
+
+ InboundReceiver instance = null;
+ Mock runtimeConfig = null;
+ Mock deliveryChannel = null;
+ Mock componentContext = null;
+ Map operations = new HashMap();
+ Endpoint endpoint = new EndpointImpl();
+
+ public InboundReceiverTest(String testName) {
+ super(testName);
+ endpoint.setServiceUnitID("Test-SU");
+ }
+
+ protected void setUp() throws Exception {
+ componentContext = mock(ComponentContext.class);
+ KeyStoreUtilClient keystoreUtil = new KeyStoreUtilClient((ComponentContext) componentContext.proxy());
+ runtimeConfig = mock(RuntimeConfiguration.class,
+ new Class[]{String.class, KeyStoreUtilClient.class},
+ new Object[]{"test/com/sun/jbi/filebc/testDir", keystoreUtil});
+ deliveryChannel = mock(DeliveryChannel.class);
+ runtimeConfig.expects(once()).method("getThreads").will(returnValue(new Integer(10)));
+ runtimeConfig.expects(once()).method("addNotificationListener").withAnyArguments();
+
+ deliveryChannel.expects(atLeastOnce()).method("createExchangeFactory");
+
+ // getIBWorkerThreads is called while initializing InboundMessageProcessor
+ runtimeConfig.expects(atLeastOnce()).method("getIBWorkerThreads").will(returnValue(5));
+
+ instance = new InboundReceiver((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ (RuntimeConfiguration) runtimeConfig.proxy());
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(InboundReceiverTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of addInboundMessageProcessor method, of class com.sun.jbi.filebc.InboundReceiver.
+ */
+ public void testAddInboundMessageProcessor() throws Exception {
+ System.out.println("Testing addInboundMessageProcessor");
+ QName serviceName = new QName("somenamespace", "someServiceName");
+ String endpointName = "someEndpointName";
+
+ // 1. testing for inbound endpoint
+ endpoint.setEndpointType(0);
+ endpoint.setServiceName(serviceName);
+ endpoint.setEndpointName(endpointName);
+ operations.put(new QName("somenamespace", "someOp1"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp2"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp3"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp4"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp5"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp6"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp7"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp8"), new FileOperation());
+ endpoint.setFileOperations(operations);
+ {
+ com.ibm.wsdl.DefinitionImpl definition = new com.ibm.wsdl.DefinitionImpl();
+
+ javax.wsdl.PortType portType = definition.createPortType();
+ portType.setQName(new QName("somenamespace", "somePortTypeName"));
+
+ javax.wsdl.Binding binding = definition.createBinding();
+ binding.setPortType(portType);
+
+ javax.wsdl.Port port = definition.createPort();
+ port.setBinding(binding);
+ port.setName(endpointName);
+
+ javax.wsdl.Service service = definition.createService();
+ service.addPort(port);
+ service.setQName(serviceName);
+
+ definition.addService(service);
+ endpoint.setDefinition(definition);
+ }
+
+ try {
+ registerLock(endpoint);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to register lock for the endpoint, due to: " + e.getMessage());
+ }
+
+ try {
+ // getIBWorkerThreads is called while initializing InboundMessageProcessor
+ runtimeConfig.expects(once()).method("getIBWorkerThreads").will(returnValue(new Integer(5)));
+
+ instance.addInboundMessageProcessor(endpoint);
+ runtimeConfig.verify();
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to test addInboundMessageProcessor due to: " + e.getMessage());
+ }
+
+ Map procs = instance.getActivatedInboundMsgProcs();
+ assertEquals(8, procs.size());
+ for (Iterator it = procs.keySet().iterator(); it.hasNext();) {
+ String key = (String) it.next();
+ assertTrue(key.startsWith(endpoint.getUniqueName()));
+ }
+
+ // 2. testing for outbound endpoint
+ endpoint.setEndpointType(1);
+ try {
+ instance.addInboundMessageProcessor(endpoint);
+ } catch (Exception e) {
+ fail("Failed to test addInboundMessageProcessor due to: " + e.getMessage());
+ }
+
+ procs = instance.getActivatedInboundMsgProcs();
+ assertEquals(8, procs.size());
+ }
+
+ /**
+ * Test of removeInboundMessageProcessor method, of class com.sun.jbi.filebc.InboundReceiver.
+ */
+ public void atestRemoveInboundMessageProcessor() {
+ System.out.println("Testing removeInboundMessageProcessor");
+ Map dummyProcs = new HashMap();
+ QName serviceName = new QName("somenamespace", "someServiceName");
+ String endpointName = "someEndpointName";
+ int numIBWorkers = 5;
+
+ endpoint.setEndpointName(endpointName);
+ endpoint.setServiceName(new QName("somenamespace", "someServiceName"));
+ {
+ com.ibm.wsdl.DefinitionImpl definition = new com.ibm.wsdl.DefinitionImpl();
+
+ javax.wsdl.PortType portType = definition.createPortType();
+ portType.setQName(new QName("somenamespace", "somePortTypeName"));
+
+ javax.wsdl.Binding binding = definition.createBinding();
+ binding.setPortType(portType);
+
+ javax.wsdl.Port port = definition.createPort();
+ port.setBinding(binding);
+ port.setName(endpointName);
+
+ javax.wsdl.Service service = definition.createService();
+ service.addPort(port);
+ service.setQName(serviceName);
+
+ definition.addService(service);
+ endpoint.setDefinition(definition);
+ }
+
+ try {
+ registerLock(endpoint);
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to register lock for the endpoint, due to: " + e.getMessage());
+ }
+
+ try {
+ String endpointUniqueName = endpoint.getUniqueName();
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp1", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp1"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp2", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp2"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp3", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp3"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp4", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp4"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp5", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp5"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp6", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp6"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp7", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp7"),numIBWorkers));
+ dummyProcs.put(endpointUniqueName + ":" + "{somenamespace}someOp8", new InboundMessageProcessor((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ endpoint,
+ new QName("somenamespace", "someOp8"),numIBWorkers));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed to set up successfully to test removeInboundMessageProcessor");
+ }
+
+ // 1. testing removing some of the activated processors
+ endpoint.setEndpointType(0);
+ endpoint.setEndpointName("someEndpointName");
+ operations.clear();
+ operations.put(new QName("somenamespace", "someOp4"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp5"), new FileOperation());
+
+ endpoint.setFileOperations(operations);
+ instance.setActivatedInboundMsgProcs(dummyProcs);
+ try {
+ instance.removeInboundMessageProcessor(endpoint);
+ } catch (Exception e) {
+ fail("Failed to test removeInboundMessageProcessor due to: " + e.getMessage());
+ }
+ instance.removeInboundMessageProcessor(endpoint);
+ Map procs = instance.getActivatedInboundMsgProcs();
+ assertEquals(6, procs.size());
+
+ // 2. testing for outbound endpoint
+ operations.put(new QName("somenamespace", "someOp1"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp2"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp3"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp4"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp5"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp6"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp7"), new FileOperation());
+ operations.put(new QName("somenamespace", "someOp8"), new FileOperation());
+ endpoint.setFileOperations(operations);
+
+ endpoint.setEndpointType(1);
+ procs = instance.getActivatedInboundMsgProcs();
+ assertEquals(6, procs.size());
+
+ // 3. testing removing all activated processors
+ endpoint.setEndpointType(0);
+ try {
+ instance.removeInboundMessageProcessor(endpoint);
+ } catch (Exception e) {
+ fail("Failed to test removeInboundMessageProcessor due to: " + e.getMessage());
+ }
+ instance.removeInboundMessageProcessor(endpoint);
+ procs = instance.getActivatedInboundMsgProcs();
+ assertEquals(0, procs.size());
+ }
+
+ private void registerLock(Endpoint endpoint) throws Exception {
+ //String key = endpoint.getServiceName().toString() + endpoint.getEndpointName();
+ String key = endpoint.getEPUUID();
+ String baseWorkDir = "test/com/sun/jbi/filebc/input/" + EPUtil.getWorkAreaBaseDir(endpoint);
+ File fWorkAreaBaseDir = new File(baseWorkDir);
+ fWorkAreaBaseDir.mkdirs();
+ String lockFilePath = baseWorkDir + File.separator + "filebc.lck";
+
+ File lockFile = new File(lockFilePath);
+ lockFile.createNewFile();
+ FileOutputStream fos = new FileOutputStream(lockFile);
+ LockRegistry.register(key, new Lock((fos != null ? fos.getChannel() : null), new ReentrantLock(), lockFilePath));
+
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ListenerMetaTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ListenerMetaTest.java
new file mode 100644
index 000000000..3a2cced72
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ListenerMetaTest.java
@@ -0,0 +1,78 @@
+#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})ListenerMetaTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc;
+
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class ListenerMetaTest extends MockObjectTestCase {
+
+ Mock replyListener = mock(MessageExchangeReplyListener.class);
+ ListenerMeta instance = new ListenerMeta(1000, (MessageExchangeReplyListener) replyListener.proxy());
+
+ public ListenerMetaTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of getRequestInvocationTime method, of class com.sun.jbi.filebc.ListenerMeta.
+ */
+ public void testGetRequestInvocationTime() {
+ System.out.println("Testing getRequestInvocationTime");
+ long expResult = 1000;
+ long result = instance.getRequestInvocationTime();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getRequestInvocationTime");
+ }
+
+ /**
+ * Test of getMessageExchangeReplyListener method, of class com.sun.jbi.filebc.ListenerMeta.
+ */
+ public void testGetMessageExchangeReplyListener() {
+ System.out.println("Testing getMessageExchangeReplyListener");
+ MessageExchangeReplyListener result = instance.getMessageExchangeReplyListener();
+ assertTrue(result instanceof MessageExchangeReplyListener);
+
+ System.out.println("Successfully tested getMessageExchangeReplyListener");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/OutboundMessageProcessorTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/OutboundMessageProcessorTest.java
new file mode 100644
index 000000000..c05b70fb3
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/OutboundMessageProcessorTest.java
@@ -0,0 +1,704 @@
+#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})OutboundMessageProcessorTest.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.FileInput;
+import com.sun.jbi.filebc.extensions.FileOperation;
+import com.sun.jbi.filebc.extensions.FileOutput;
+import com.sun.jbi.filebc.extensions.FileMessage;
+import com.sun.jbi.common.qos.messaging.MessagingChannel;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.locks.ReentrantLock;
+import javax.jbi.messaging.*;
+import javax.jbi.servicedesc.ServiceEndpoint;
+import javax.wsdl.Binding;
+import javax.wsdl.Definition;
+import javax.wsdl.Port;
+import javax.wsdl.PortType;
+import javax.wsdl.Service;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ * @author jfu
+ */
+public class OutboundMessageProcessorTest extends org.jmock.cglib.MockObjectTestCase {
+
+ static final QName THE_PORTTYPE = new QName("http://myfile-test", "portType1");
+ static final QName THE_OPERATION = new QName("http://myfile-test", "operation1");
+ static final QName THE_SERVICE = new QName("http://myfile-test", "MyFileService");
+ static final String THE_ENDPOINT = "MyFilePort";
+ static final int THE_TYPE = 0;
+ byte[] data = null;
+ private static final String REDELIVERY_LAST_RETRY_TIME = "com.sun.jbi.common.qos.redelivery.lastRetryTime";
+ private static final String REDELIVERY_TOTAL_RETRIES = "com.sun.jbi.common.qos.redelivery.totalRetries";
+ private static final String REDELIVERY_REMAINING_RETRIES = "com.sun.jbi.common.qos.redelivery.remainingRetries";
+ private static final String REDELIVERY_ERROR_DETAILS = "com.sun.jbi.common.qos.redelivery.errorDetails";
+ private static final String REDELIVERY_FAILURE = "com.sun.jbi.common.qos.redelivery.failure";
+ OutboundMessageProcessor instance = null;
+ Endpoint endpoint = null;
+ QName operation = null;
+ Map services = null;
+ Mock deliveryChannel = null;
+ Mock endpointProxy = null;
+ Mock endpointStatus = null;
+ Mock serviceUnit = null;
+ Mock service = null;
+ Mock port = null;
+ Mock portType = null;
+ Mock binding = null;
+ Mock wsdlDefinition = null;
+ List endpoints = new ArrayList();
+ Map serviceUnits = new HashMap();
+ Map operations = new HashMap();
+ Document doc = null;
+
+ public OutboundMessageProcessorTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ data = "Hello World!!!".getBytes();
+ wsdlDefinition = mock(Definition.class);
+ operation = THE_OPERATION;
+ //deliveryChannel = mock(DeliveryChannel.class);
+ deliveryChannel = mock(MessagingChannel.class);
+ endpointProxy = mock(Endpoint.class);
+ endpointStatus = mock(EndpointStatus.class);
+ endpoint = (Endpoint) endpointProxy.proxy();
+ service = mock(Service.class);
+ port = mock(Port.class);
+ portType = mock(PortType.class);
+ binding = mock(Binding.class);
+ serviceUnit = mock(ServiceUnit.class);
+ endpoints.add(endpointProxy.proxy());
+ serviceUnits.put("1", serviceUnit.proxy());
+
+ services = new HashMap();
+ services.put(THE_SERVICE, (Service) service.proxy());
+ File lockFile = new File("test/com/sun/jbi/filebc/input/filebc.lck");
+ RandomAccessFile raf = new RandomAccessFile(lockFile, "rw");
+ LockRegistry.register("fakedUUID", new Lock(raf.getChannel(), new ReentrantLock(), lockFile.getCanonicalPath()));
+
+ try {
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ synchronized (dbf) {
+ dbf.setNamespaceAware(true);
+ doc = dbf.newDocumentBuilder().newDocument();
+ }
+ } catch (Exception e) {
+ System.out.println("Cannot create a document");
+ }
+
+ if (doc != null) {
+ org.w3c.dom.Element root = doc.createElement("Simple-file-write-test");
+ doc.appendChild(root);
+ }
+
+ instance = new OutboundMessageProcessor((MessagingChannel) deliveryChannel.proxy(),
+ serviceUnits,
+ new HashMap());
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(OutboundMessageProcessorTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of processRequestReplyOutbound method, of class com.sun.jbi.filebc.OutboundMessageProcessor.
+ */
+ public void testProcessRequestReplyOutbound() {
+ System.out.println("Testing processRequestReplyOutbound");
+
+ Mock inout = mock(InOut.class);
+ Mock inMessage = mock(NormalizedMessage.class);
+ Mock outMessage = mock(NormalizedMessage.class);
+ Mock denormalizer = mock(FileDenormalizer.class);
+
+ FileOperation fileoperation = new FileOperation();
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress addr = new FileAddress();
+
+ fileInput.setFileMessage(fileMessage);
+ fileoperation.setFileOperationInput(fileInput);
+ fileMessage.setFileName("TestRequestResponseOutbound.txt");
+ operations.put(THE_OPERATION, fileoperation);
+ addr.setFileDirectory("test/com/sun/jbi/filebc/output");
+
+ endpointProxy.expects(atLeastOnce()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+// endpointProxy.expects(atLeastOnce()).method("getFileOperations").will(returnValue(operations));
+// endpointProxy.expects(atLeastOnce()).method("getFileAddress").will(returnValue(addr));
+// endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+// endpointProxy.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+// endpointProxy.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+// deliveryChannel.expects(atLeastOnce()).method("send").with(isA(InOut.class));
+// endpointProxy.expects(atLeastOnce()).method("getDefinition").will(returnValue(wsdlDefinition.proxy()));
+// wsdlDefinition.expects(atLeastOnce()).method("getServices").will(returnValue((Map)services));
+// 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("getQName").will(returnValue(THE_PORTTYPE));
+
+ // 1. testing the case when exchange status is done
+ inout.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.DONE));
+ endpointStatus.expects(atLeastOnce()).method("incrementReceivedDones");
+ instance.processRequestReplyOutbound((InOut) inout.proxy(), endpoint, operation);
+ endpointStatus.verify();
+
+ // 2. testing the case when exchange status is error
+ inout.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.ERROR));
+ endpointStatus.expects(once()).method("incrementReceivedErrors");
+ instance.processRequestReplyOutbound((InOut) inout.proxy(), endpoint, operation);
+ endpointStatus.verify();
+
+ // Outbound Req Reply is used for Sync (Solicited) Read now.
+// // 3. testing the case when status is active and file write is successful
+// endpointStatus.expects(atLeastOnce()).method("incrementReceivedRequests");
+// endpointStatus.expects(atLeastOnce()).method("incrementSentReplies");
+// denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(data));
+// instance.setFileDenormalizer((FileDenormalizer)denormalizer.proxy());
+// inout.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.ACTIVE));
+// inout.expects(atLeastOnce()).method("getInMessage").will(returnValue(inMessage.proxy()));
+// inout.expects(atLeastOnce()).method("createMessage").will(returnValue(outMessage.proxy()));
+// inout.expects(atLeastOnce()).method("setOutMessage").withAnyArguments();
+// outMessage.expects(atLeastOnce()).method("setContent").withAnyArguments();
+// outMessage.expects(atLeastOnce()).method("setProperty").withAnyArguments();
+// instance.processRequestReplyOutbound((InOut)inout.proxy(), endpoint, operation);
+// inMessage.verify();
+// outMessage.verify();
+//
+// // 4. testing the case when status is active but file write fails
+// denormalizer.expects(once()).method("denormalize").will(throwException(new Exception("Some error occurred.")));
+// inout.expects(once()).method("setError").with(isA(Exception.class));
+// instance.processRequestReplyOutbound((InOut)inout.proxy(), endpoint, operation);
+// inMessage.verify();
+// outMessage.verify();
+ }
+
+ /**
+ * Test of processRequestReplyInbound method, of class com.sun.jbi.filebc.OutboundMessageProcessor.
+ */
+ public void testProcessRequestReplyInbound() {
+ System.out.println("Testing processRequestReplyInbound");
+
+ Mock inout = mock(InOut.class);
+ Mock inMessage = mock(NormalizedMessage.class);
+ Mock denormalizer = mock(FileDenormalizer.class);
+ Mock listener = mock(MessageExchangeReplyListener.class);
+
+ FileOperation fileoperation = new FileOperation();
+ FileOutput fileOutput = new FileOutput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress addr = new FileAddress();
+
+ fileOutput.setFileMessage(fileMessage);
+ fileMessage.setFileName("TestRequestResponseInbound.txt");
+ fileoperation.setFileOperationOutput(fileOutput);
+ operations.put(THE_OPERATION, fileoperation);
+ addr.setFileDirectory("test/com/sun/jbi/filebc/output");
+
+ String epUUID = "fakedUUID";
+ endpointProxy.expects(atLeastOnce()).method("getEPUUID").will(returnValue(epUUID));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpointProxy.expects(atLeastOnce()).method("getFileOperations").will(returnValue(operations));
+ endpointProxy.expects(atLeastOnce()).method("getFileAddress").will(returnValue(addr));
+ endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointProxy.expects(atLeastOnce()).method("getWorkAreaDir");
+ deliveryChannel.expects(atLeastOnce()).method("send").with(isA(InOut.class));
+ endpointProxy.expects(atLeastOnce()).method("getDefinition").will(returnValue(wsdlDefinition.proxy()));
+ wsdlDefinition.expects(atLeastOnce()).method("getServices").will(returnValue((Map) services));
+ 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("getQName").will(returnValue(THE_PORTTYPE));
+
+ // QOS: Re-delivery
+ String groupid = java.util.UUID.randomUUID().toString();
+ String messageid = "1";
+ inout.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(groupid));
+ inout.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(messageid));
+ String lastRetryTime = "50000";
+ String totalRetries = "3";
+ String remainingRetries = "1";
+ Exception errorDetails = new Exception();
+ String redeliveryFailure = "false";
+ inout.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_LAST_RETRY_TIME)).will(returnValue(lastRetryTime));
+ inout.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_TOTAL_RETRIES)).will(returnValue(totalRetries));
+ inout.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_REMAINING_RETRIES)).will(returnValue(remainingRetries));
+ //inout.expects(once()).method("getProperty").with(eq(REDELIVERY_ERROR_DETAILS)).will(returnValue(errorDetails));
+ inout.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_FAILURE)).will(returnValue(redeliveryFailure));
+ inout.expects(atLeastOnce()).method("getExchangeId");
+
+ listener.expects(atLeastOnce()).method("processReplyMessage");
+
+ // 1. testing the case when exchange status is done
+ inout.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.DONE));
+ inout.expects(atLeastOnce()).method("getError");
+ endpointStatus.expects(once()).method("incrementReceivedDones");
+ instance.processRequestReplyInbound((InOut) inout.proxy(), endpoint, operation, (MessageExchangeReplyListener) listener.proxy());
+ endpointStatus.verify();
+
+ // 2. testing the case when exchange status is error
+ Mock serviceEndpoint = mock(ServiceEndpoint.class);
+ inout.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.ERROR));
+ inout.expects(atLeastOnce()).method("getEndpoint").will(returnValue(serviceEndpoint.proxy()));
+ inout.expects(atLeastOnce()).method("getOperation");
+ serviceEndpoint.expects(atLeastOnce()).method("getServiceName");
+ serviceEndpoint.expects(atLeastOnce()).method("getEndpointName");
+ endpointStatus.expects(once()).method("incrementReceivedErrors");
+ inout.expects(atLeastOnce()).method("getError");
+ endpointProxy.expects(atLeastOnce()).method("getServiceUnitID");
+ endpointProxy.expects(atLeastOnce()).method("getRedeliveryConfiguration");
+ instance.processRequestReplyInbound((InOut) inout.proxy(), endpoint, operation, (MessageExchangeReplyListener) listener.proxy());
+ endpointStatus.verify();
+
+ // 3. testing the case when status is active and file write is successful
+ endpointStatus.expects(atLeastOnce()).method("incrementReceivedReplies");
+ endpointStatus.expects(atLeastOnce()).method("incrementSentDones");
+ //denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(data));
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ instance.setFileDenormalizer((FileDenormalizer) denormalizer.proxy());
+ inout.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.ACTIVE));
+ inout.expects(atLeastOnce()).method("getOutMessage").will(returnValue(inMessage.proxy()));
+ inMessage.expects(atLeastOnce()).method("getProperty");
+ inMessage.expects(atLeastOnce()).method("setProperty").withAnyArguments();
+ inout.expects(atLeastOnce()).method("setStatus").with(eq(ExchangeStatus.DONE));
+ listener.expects(once()).method("processReplyMessage").with(isA(InOut.class));
+ inout.expects(atLeastOnce()).method("getExchangeId");
+ instance.processRequestReplyInbound((InOut) inout.proxy(), endpoint, operation, (MessageExchangeReplyListener) listener.proxy());
+ inMessage.verify();
+
+ // 4. testing the case when status is active but file write fails
+ denormalizer.expects(once()).method("denormalize").will(throwException(new Exception("Some error occurred.")));
+ endpointStatus.expects(atLeastOnce()).method("incrementSentErrors");
+ inout.expects(once()).method("setError").with(isA(Exception.class));
+ inout.expects(atLeastOnce()).method("setStatus").with(eq(ExchangeStatus.ERROR));
+ inout.expects(atLeastOnce()).method("setProperty").withAnyArguments();
+ listener.expects(once()).method("processReplyMessage").with(isA(InOut.class));
+ instance.processRequestReplyInbound((InOut) inout.proxy(), endpoint, operation, (MessageExchangeReplyListener) listener.proxy());
+ inMessage.verify();
+ }
+
+ /**
+ * Test of processOneWayOutbound method, of class com.sun.jbi.filebc.OutboundMessageProcessor.
+ */
+ public void testProcessOneWayOutbound() {
+ System.out.println("Testing processOneWayOutbound");
+
+ Mock inonly = mock(InOnly.class);
+ Mock inMessage = mock(NormalizedMessage.class);
+ Mock denormalizer = mock(FileDenormalizer.class);
+
+ FileOperation fileoperation = new FileOperation();
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ FileAddress addr = new FileAddress();
+
+ fileoperation.setFileOperationInput(fileInput);
+ fileInput.setFileMessage(fileMessage);
+ fileMessage.setFileName("TestOneWayOutbound.txt");
+ fileMessage.setMultipleRecordsPerFile(Boolean.FALSE);
+ operations.put(THE_OPERATION, fileoperation);
+
+ addr.setFileDirectory("test/com/sun/jbi/filebc/output");
+ String epUUID = "fakedUUID";
+ endpointProxy.expects(atLeastOnce()).method("getEPUUID").will(returnValue(epUUID));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ endpointProxy.expects(atLeastOnce()).method("getFileOperations").will(returnValue(operations));
+ endpointProxy.expects(atLeastOnce()).method("getFileAddress").will(returnValue(addr));
+ endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointProxy.expects(atLeastOnce()).method("getServiceUnitID").will(returnValue("theID"));
+ endpointProxy.expects(atLeastOnce()).method("getWorkAreaDir");
+ endpointStatus.expects(atLeastOnce()).method("incrementReceivedRequests");
+ deliveryChannel.expects(atLeastOnce()).method("send").with(isA(InOnly.class));
+ endpointProxy.expects(atLeastOnce()).method("getDefinition").will(returnValue(wsdlDefinition.proxy()));
+ wsdlDefinition.expects(atLeastOnce()).method("getServices").will(returnValue((Map) services));
+ 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("getQName").will(returnValue(THE_PORTTYPE));
+
+ // 1. testing success scenario
+ inonly.expects(atLeastOnce()).method("getInMessage").will(returnValue(inMessage.proxy()));
+ inonly.expects(atLeastOnce()).method("setStatus").with(eq(ExchangeStatus.DONE));
+ endpointStatus.expects(once()).method("incrementSentDones");
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ inMessage.expects(atLeastOnce()).method("getProperty");
+ inMessage.expects(atLeastOnce()).method("setProperty").withAnyArguments();
+ instance.setFileDenormalizer((FileDenormalizer) denormalizer.proxy());
+ instance.processOneWayOutbound((InOnly) inonly.proxy(), endpoint, operation);
+ inMessage.verify();
+ inonly.verify();
+
+ // 2. testing failure scenario
+ inonly.expects(atLeastOnce()).method("setStatus").with(eq(ExchangeStatus.ERROR));
+ inonly.expects(once()).method("setError").withAnyArguments();
+ inonly.expects(atLeastOnce()).method("setProperty");
+ endpointStatus.expects(once()).method("incrementSentErrors");
+ denormalizer.expects(once()).method("denormalize").will(throwException(new Exception("Some error occurred.")));
+ instance.processOneWayOutbound((InOnly) inonly.proxy(), endpoint, operation);
+ inMessage.verify();
+ inonly.verify();
+ }
+
+ /**
+ * Test of processOneWayInbound method, of class com.sun.jbi.filebc.OutboundMessageProcessor.
+ */
+ public void testProcessOneWayInbound() {
+ System.out.println("Testing processOneWayInbound");
+
+ Mock inonly = mock(InOnly.class);
+ Mock listener = mock(MessageExchangeReplyListener.class);
+ listener.expects(atLeastOnce()).method("processReplyMessage").with(isA(InOnly.class));
+ Mock normalizedMessage = mock(NormalizedMessage.class);
+
+ // 1. testing the case when exchange status is done
+ endpointProxy.expects(atLeastOnce()).method("getEndpointStatus").will(returnValue(endpointStatus.proxy()));
+ inonly.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.DONE));
+
+ String groupid = java.util.UUID.randomUUID().toString();
+ String messageid = "1";
+ inonly.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_GROUP_ID)).will(returnValue(groupid));
+ inonly.expects(atLeastOnce()).method("getProperty").with(eq(FileComponentContext.CRMP_MESSAGE_ID)).will(returnValue(messageid));
+ String lastRetryTime = "50000";
+ String totalRetries = "3";
+ String remainingRetries = "1";
+ Exception errorDetails = new Exception();
+ String redeliveryFailure = "false";
+ inonly.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_LAST_RETRY_TIME)).will(returnValue(lastRetryTime));
+ inonly.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_TOTAL_RETRIES)).will(returnValue(totalRetries));
+ inonly.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_REMAINING_RETRIES)).will(returnValue(remainingRetries));
+ //inonly.expects(once()).method("getProperty").with(eq(REDELIVERY_ERROR_DETAILS)).will(returnValue(errorDetails));
+ inonly.expects(atLeastOnce()).method("getProperty").with(eq(REDELIVERY_FAILURE)).will(returnValue(redeliveryFailure));
+ inonly.expects(atLeastOnce()).method("getExchangeId");
+ inonly.expects(atLeastOnce()).method("getError");
+ endpointStatus.expects(once()).method("incrementReceivedDones");
+ instance.processOneWayInbound((InOnly) inonly.proxy(), endpoint, (MessageExchangeReplyListener) listener.proxy());
+ inonly.verify();
+ endpointStatus.verify();
+
+ // 2. testing the case when exchange status is error
+ Mock serviceEndpoint = mock(ServiceEndpoint.class);
+// inonly.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.ERROR));
+ inonly.expects(atLeastOnce()).method("getEndpoint").will(returnValue(serviceEndpoint.proxy()));
+ inonly.expects(atLeastOnce()).method("getOperation");
+ serviceEndpoint.expects(atLeastOnce()).method("getServiceName");
+ serviceEndpoint.expects(atLeastOnce()).method("getEndpointName");
+ inonly.expects(atLeastOnce()).method("getStatus").will(returnValue(ExchangeStatus.ERROR));
+ endpointStatus.expects(once()).method("incrementReceivedErrors");
+ inonly.expects(atLeastOnce()).method("getError");
+ endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpointProxy.expects(atLeastOnce()).method("getServiceUnitID");
+ endpointProxy.expects(atLeastOnce()).method("getRedeliveryConfiguration");
+ instance.processOneWayInbound((InOnly) inonly.proxy(), endpoint, (MessageExchangeReplyListener) listener.proxy());
+ inonly.verify();
+ endpointStatus.verify();
+ }
+
+ /**
+ * Test of findEndpoint method, of class com.sun.jbi.filebc.OutboundMessageProcessor
+ * for the scenario where a match is found
+ */
+ public void testFindEndpointMatchFound() {
+ System.out.println("Testing findEndpoint");
+
+ endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ serviceUnit.expects(atLeastOnce()).method("getEndpoints").will(returnValue(endpoints));
+ String suId = "abc";
+ serviceUnit.expects(atLeastOnce()).method("getServiceUnitId").will(returnValue(suId));
+ endpointProxy.expects(atLeastOnce()).method("setServiceUnitID").with(eq(suId));
+
+ Mock msgExchange = mock(MessageExchange.class);
+ Mock serviceEndpoint = mock(ServiceEndpoint.class);
+ msgExchange.expects(atLeastOnce()).method("getEndpoint").will(returnValue(serviceEndpoint.proxy()));
+ serviceEndpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ serviceEndpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+
+
+ Endpoint result = instance.findEndpoint((MessageExchange) msgExchange.proxy());
+ assertNotNull(result);
+ assertEquals(THE_SERVICE, result.getServiceName());
+ assertEquals(THE_ENDPOINT, result.getEndpointName());
+ }
+
+ /**
+ * Test of findEndpoint method, of class com.sun.jbi.filebc.OutboundMessageProcessor
+ * for the scenario where no match is found
+ */
+ public void testFindEndpoinNoMatchFound() {
+ System.out.println("Testing findEndpoint");
+
+ endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ serviceUnit.expects(atLeastOnce()).method("getEndpoints").will(returnValue(endpoints));
+
+ Mock msgExchange = mock(MessageExchange.class);
+ Mock serviceEndpoint = mock(ServiceEndpoint.class);
+ msgExchange.expects(atLeastOnce()).method("getEndpoint").will(returnValue(serviceEndpoint.proxy()));
+ serviceEndpoint.expects(atLeastOnce()).method("getServiceName").will(returnValue(new QName("notMatchingService")));
+ serviceEndpoint.expects(atLeastOnce()).method("getEndpointName").will(returnValue("notMatchingEndpoint"));
+ Endpoint result = instance.findEndpoint((MessageExchange) msgExchange.proxy());
+ assertNull(result);
+ }
+
+ /**
+ * Test of writeMessage method, of class com.sun.jbi.filebc.OutboundMessageProcessor
+ */
+ public void testWriteMessage() {
+ Mock normalizedMsg = mock(NormalizedMessage.class);
+ Mock denormalizer = mock(FileDenormalizer.class);
+
+ FileAddress addr = new FileAddress();
+ FileMessage fileMessage = new FileMessage();
+ QName opname = QName.valueOf("operation1");
+
+ addr.setFileDirectory("test/com/sun/jbi/filebc/output");
+ String epUUID = "fakedUUID";
+ endpointProxy.expects(atLeastOnce()).method("getEPUUID").will(returnValue(epUUID));
+ endpointProxy.expects(atLeastOnce()).method("getFileAddress").will(returnValue(addr));
+ endpointProxy.expects(atLeastOnce()).method("getServiceName").will(returnValue(THE_SERVICE));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointName").will(returnValue(THE_ENDPOINT));
+ endpointProxy.expects(atLeastOnce()).method("getEndpointType").will(returnValue(THE_TYPE));
+ endpointProxy.expects(atLeastOnce()).method("getServiceUnitID");
+ endpointProxy.expects(atLeastOnce()).method("getWorkAreaDir");
+ instance.setFileDenormalizer((FileDenormalizer) denormalizer.proxy());
+ normalizedMsg.expects(atLeastOnce()).method("getProperty");
+ normalizedMsg.expects(atLeastOnce()).method("setProperty");
+
+ // testing simple file write with real file name
+ fileMessage.setFileName("TestFileWrite.txt");
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ try {
+ instance.writeMessage((NormalizedMessage) normalizedMsg.proxy(), (Endpoint) endpointProxy.proxy(), opname, fileMessage);
+ assertEquals("Hello World!!!", getFileContents(new File("test/com/sun/jbi/filebc/output/TestFileWrite.txt").getAbsolutePath()));
+ } catch (Exception e) {
+ fail("Failed to test writeMessage due to: " + e.getMessage());
+ }
+
+ // testing writing EOL with real file name
+ fileMessage.setAddEOL(Boolean.TRUE);
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ try {
+ instance.writeMessage((NormalizedMessage) normalizedMsg.proxy(), (Endpoint) endpointProxy.proxy(), opname, fileMessage);
+ assertEquals("Hello World!!!", getFileContents(new File("test/com/sun/jbi/filebc/output/TestFileWrite.txt").getAbsolutePath()).trim());
+ } catch (Exception e) {
+ fail("Failed to test writeMessage due to: " + e.getMessage());
+ }
+
+ // testing writing multiple records with real file name
+ File[] files = new File("test/com/sun/jbi/filebc/output").listFiles();
+ for (int ii = 0; ii < files.length; ii++) {
+ File afile = (File) files[ii];
+ afile.delete();
+ }
+ fileMessage.setAddEOL(Boolean.FALSE);
+ fileMessage.setMultipleRecordsPerFile(Boolean.TRUE);
+ fileMessage.setRecordDelimiter("${symbol_escape}r${symbol_escape}n");
+ try {
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ instance.writeMessage((NormalizedMessage) normalizedMsg.proxy(), (Endpoint) endpointProxy.proxy(), opname, fileMessage);
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ instance.writeMessage((NormalizedMessage) normalizedMsg.proxy(), (Endpoint) endpointProxy.proxy(), opname, fileMessage);
+ denormalizer.expects(atLeastOnce()).method("denormalize").withAnyArguments().will(returnValue(new ByteArrayInputStream(data)));
+ instance.writeMessage((NormalizedMessage) normalizedMsg.proxy(), (Endpoint) endpointProxy.proxy(), opname, fileMessage);
+ assertEquals("Hello World!!!${symbol_escape}r${symbol_escape}nHello World!!!${symbol_escape}r${symbol_escape}nHello World!!!", getFileContents(new File("test/com/sun/jbi/filebc/output/TestFileWrite.txt").getAbsolutePath()).trim());
+ } catch (Exception e) {
+ fail("Failed to test writeMessage due to: " + e.getMessage());
+ }
+
+ // testing writing single record with file name pattern
+ /**
+ fileMessage.setFileNameIsPattern(Boolean.TRUE);
+ try {
+ instance.writeMessage((NormalizedMessage) normalizedMsg.proxy(), (Endpoint)endpointProxy.proxy(), opname, fileMessage);
+ assertTrue(new File("test/com/sun/jbi/filebc/output/blah0.dat").exists());
+ assertEquals("Hello World!!!", getFileContents(new File("test/com/sun/jbi/filebc/output/blah0.dat").getAbsolutePath()).trim());
+ } catch (Exception e) {
+ fail("Failed to test writeMessage due to: " + e.getMessage());
+ }
+ **/
+ }
+
+ /**
+ * Test of validateRequestReplyInboundMessageExchangeProperties method,
+ * of class com.sun.jbi.filebc.OutboundMessageProcessor
+ */
+ public void testValidateRequestReplyInboundMessageExchangeProperties() {
+ FileOperation operation = new FileOperation();
+ FileOutput fileOutput = new FileOutput();
+ FileMessage fileMessage = new FileMessage();
+ QName opname = QName.valueOf("operation1");
+
+ // testing null input properties
+ try {
+ instance.validateRequestReplyInboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateRequestReplyInboundMessageExchangeProperties - an exception should be raised due to null File Input properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateRequestReplyInboundMessageExchangeProperties with null File Input properties.");
+ }
+
+ // testing null File write properties
+ operation.setFileOperationOutput(fileOutput);
+ try {
+ instance.validateRequestReplyInboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateRequestReplyInboundMessageExchangeProperties - an exception should be raised due to null File Write properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateRequestReplyInboundMessageExchangeProperties with null File Write properties.");
+ }
+
+ // testing missing required File write attributes
+ fileOutput.setFileMessage(fileMessage);
+ try {
+ instance.validateRequestReplyInboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateRequestReplyInboundMessageExchangeProperties - an exception should be raised due to undefined fileName attribute when fileNameIsPattern is false.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateRequestReplyInboundMessageExchangeProperties when fileName is not defined and fileNameIsPattern is false.");
+ }
+
+ fileMessage.setFileNameIsPattern(Boolean.TRUE);
+ try {
+ instance.validateRequestReplyInboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateRequestReplyInboundMessageExchangeProperties - an exception should be raised due to undefined filePrefix and fileExtension attributes when fileNameIsPattern is true.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateRequestReplyInboundMessageExchangeProperties when both filePrefix and fileExtension are not defined and fileNameIsPattern is true.");
+ }
+
+ // testing invalid File Write attribute value
+ fileMessage.setFileType("undefined");
+ try {
+ instance.validateRequestReplyInboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateRequestReplyInboundMessageExchangeProperties - an exception should be raised due to invalid File Write attribute value: fileType is undefined.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateRequestReplyInboundMessageExchangeProperties: invalid File Write attribute value: fileType is undefined.");
+ }
+ }
+
+ /**
+ * Test of validateOutboundMessageExchangeProperties method,
+ * of class com.sun.jbi.filebc.OutboundMessageProcessor
+ */
+ public void testValidateOutboundMessageExchangeProperties() {
+ FileOperation operation = new FileOperation();
+ FileInput fileInput = new FileInput();
+ FileMessage fileMessage = new FileMessage();
+ QName opname = QName.valueOf("operation1");
+
+ // testing null input properties
+ try {
+ instance.validateOutboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateOutboundMessageExchangeProperties - an exception should be raised due to null File Input properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateOutboundMessageExchangeProperties with null File Input properties.");
+ }
+
+ // testing null File write properties
+ operation.setFileOperationInput(fileInput);
+ try {
+ instance.validateOutboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateOutboundMessageExchangeProperties - an exception should be raised due to null File Write properties.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateOutboundMessageExchangeProperties with null File Write properties.");
+ }
+
+ // testing missing required File write attributes
+ fileInput.setFileMessage(fileMessage);
+ try {
+ instance.validateOutboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateOutboundMessageExchangeProperties - an exception should be raised due to undefined fileName attribute when fileNameIsPattern is false.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateOutboundMessageExchangeProperties when fileName is not defined and fileNameIsPattern is false.");
+ }
+
+ fileMessage.setFileNameIsPattern(Boolean.TRUE);
+ try {
+ instance.validateOutboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateOutboundMessageExchangeProperties - an exception should be raised due to undefined filePrefix and fileExtension attributes when fileNameIsPattern is true.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateOutboundMessageExchangeProperties when both filePrefix and fileExtension are not defined and fileNameIsPattern is true.");
+ }
+
+ // testing invalid File Write attribute value
+ fileMessage.setFileType("undefined");
+ try {
+ instance.validateOutboundMessageExchangeProperties(operation, opname);
+ fail("Failed to test validateOutboundMessageExchangeProperties - an exception should be raised due to invalid File Write attribute value: fileType is undefined.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested validateOutboundMessageExchangeProperties: invalid File Write attribute value: fileType is undefined.");
+ }
+ }
+
+ private String getFileContents(String fileName) {
+ StringBuffer output = new StringBuffer();
+ java.io.FileReader reader = null;
+
+ try {
+ reader = new java.io.FileReader(fileName);
+ char[] buff = new char[512];
+ int len = reader.read(buff);
+ while (len > 0) {
+ output.append(buff, 0, len);
+ len = reader.read(buff);
+ }
+ reader.close();
+ } catch (Exception e) {
+ fail("Failed to retrieve content from " + fileName + ".");
+ }
+
+ return output.toString();
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ReceiverTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ReceiverTest.java
new file mode 100644
index 000000000..37b8f5463
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ReceiverTest.java
@@ -0,0 +1,103 @@
+#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})ReceiverTest.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.List;
+import java.util.HashMap;
+import org.jmock.*;
+
+import com.sun.jbi.common.qos.messaging.MessagingChannel;
+import com.sun.jbi.component.jbiext.KeyStoreUtilClient;
+import javax.jbi.component.ComponentContext;
+
+/**
+ *
+ * @author sweng
+ */
+public class ReceiverTest extends org.jmock.cglib.MockObjectTestCase {
+
+ Receiver instance = null;
+ Mock runtimeConfig = null;
+ Mock deliveryChannel = null;
+ private Mock componentContext = null;
+
+ public ReceiverTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ componentContext = mock(ComponentContext.class);
+ KeyStoreUtilClient keystoreUtil = new KeyStoreUtilClient((ComponentContext) componentContext.proxy());
+ runtimeConfig = mock(RuntimeConfiguration.class,
+ new Class[]{String.class, KeyStoreUtilClient.class},
+ new Object[]{"test/com/sun/jbi/filebc/testDir", keystoreUtil});
+ deliveryChannel = mock(MessagingChannel.class);
+ runtimeConfig.expects(once()).method("getThreads").will(returnValue(new Integer(10)));
+ runtimeConfig.expects(once()).method("addNotificationListener").withAnyArguments();
+ instance = new Receiver((MessagingChannel) deliveryChannel.proxy(),
+ new HashMap(),
+ (RuntimeConfiguration) runtimeConfig.proxy());
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(ReceiverTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of setThreads method, of class com.sun.jbi.filebc.Receiver.
+ */
+ public void testSetThreads() {
+ System.out.println("Testing setThreads");
+
+ instance.setThreads(8);
+ List workers = instance.getWorkers();
+ assertEquals(8, workers.size());
+ }
+
+ /**
+ * Test of stopReceiving method, of class com.sun.jbi.filebc.Receiver.
+ */
+ public void testStopReceiving() {
+ System.out.println("Testing stopReceiving");
+ instance.stopReceiving();
+
+ List workers = instance.getWorkers();
+ assertEquals(0, workers.size());
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ServiceUnitImplTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ServiceUnitImplTest.java
new file mode 100644
index 000000000..25a07a26d
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ServiceUnitImplTest.java
@@ -0,0 +1,211 @@
+#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})ServiceUnitImplTest.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.messaging.DeliveryChannel;
+import java.util.ArrayList;
+import java.util.List;
+import javax.jbi.component.ComponentContext;
+import javax.management.MBeanServer;
+import javax.xml.namespace.QName;
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class ServiceUnitImplTest extends MockObjectTestCase {
+
+ ServiceUnitImpl instance = null;
+ Mock componentContext = mock(ComponentContext.class);
+ Mock deliveryChannel = mock(DeliveryChannel.class);
+ Mock mbServer = mock(MBeanServer.class);
+ StatusProviderHelper statusHelper = null;
+ InboundReceiver inboundReceiver = null;
+ Endpoint endpoint = null;
+ List endpoints = new ArrayList();
+
+ public ServiceUnitImplTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ statusHelper = new StatusProviderHelper("shortName", "componentType", "componentName", (MBeanServer) mock(MBeanServer.class).proxy());
+ endpoint = new EndpointImpl();
+ endpoint.setServiceName(new QName("MySerivceName"));
+ endpoint.setEndpointName("MyEndpointName");
+ endpoints.add(endpoint);
+
+ inboundReceiver = new InboundReceiver((ComponentContext) componentContext.proxy(),
+ (DeliveryChannel) deliveryChannel.proxy(),
+ new RuntimeConfiguration("test/com/sun/jbi/filebc/testDir", null));
+ instance = new ServiceUnitImpl("TestId",
+ "test/com/sun/jbi/filebc/packaging/descriptors",
+ (ComponentContext) componentContext.proxy(),
+ new RuntimeConfiguration("test/com/sun/jbi/filebc/testDir", null),
+ statusHelper,
+ inboundReceiver);
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(ServiceUnitImplTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of getServiceUnitId method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+ public void testGetServiceUnitId() {
+ System.out.println("Testing getServiceUnitId");
+
+ String result = instance.getServiceUnitId();
+ assertEquals("TestId", result);
+ }
+
+ /**
+ * Test of init method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+ public void testInit() throws Exception {
+ System.out.println("Testing init");
+
+ instance.setEndpoints(endpoints);
+ //componentContext.expects(atLeastOnce()).method("getComponentName").will(returnValue("someComponentName"));
+ //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);
+
+ try {
+ instance.init();
+ System.out.println("Successfully tested init");
+ } catch (Exception e) {
+ fail("Failed to test init method due to: " + e.getMessage());
+ }
+ }
+
+ /**
+ * Test of start method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+ public void testStart() throws Exception {
+ System.out.println("Testing start");
+ try {
+ instance.start();
+ System.out.println("Successfully tested start");
+ } catch (Exception e) {
+ fail("Failed to test start method due to: " + e.getMessage());
+ }
+ }
+
+ /**
+ * Test of stop method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+ public void testStop() throws Exception {
+ System.out.println("Testing stop");
+
+ try {
+ instance.stop();
+ System.out.println("Successfully tested stop");
+ } catch (Exception e) {
+ fail("Failed to test stop method due to: " + e.getMessage());
+ }
+ }
+
+ /**
+ * Test of shutdown method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+ public void testShutdown() throws Exception {
+ System.out.println("Testing shutdown");
+
+ try {
+ instance.shutdown();
+ System.out.println("Successfully tested shutdown");
+ } catch (Exception e) {
+ fail("Failed to test shutdown method due to: " + e.getMessage());
+ }
+ }
+ /**
+ * Test of activateEndpoint method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+// public void testActivateEndpoint() throws Exception {
+// System.out.println("Testing activateEndpoint");
+//
+// // 1. testing the scenario where endpoint type is outbound
+// endpoint.setEndpointType(1);
+// Mock serviceEndpoint = mock(ServiceEndpoint.class);
+// componentContext.expects(atLeastOnce()).method("activateEndpoint").with(eq(new QName("MySerivceName")), eq("MyEndpointName")).
+// will(returnValue((ServiceEndpoint)serviceEndpoint.proxy()));
+//
+// instance.activateEndpoint(endpoint);
+// componentContext.verify();
+// System.out.println("Successfully tested activateEndpoint for an outbound endpoint");
+//
+// // 2. testing the scenario where endpoint type is inbound
+// endpoint.setEndpointType(0);
+// try {
+// instance.activateEndpoint(endpoint);
+// System.out.println("Successfully tested activateEndpoint for an inbound endpoint");
+// } catch (Exception e) {
+// fail("Failed to test activateEndpoint for an inbound endpoint");
+// }
+// }
+ /**
+ * Test of deactivateEndpoint method, of class com.sun.jbi.filebc.ServiceUnitImpl.
+ */
+// public void testDeactivateEndpoint() throws Exception {
+// System.out.println("Testing deactivateEndpoint");
+//
+// // 1. testing the scenario where endpoint type is outbound
+// endpoint.setEndpointType(1);
+// Mock serviceEndpoint = mock(ServiceEndpoint.class);
+// endpoint.setServiceEndpoint((ServiceEndpoint) serviceEndpoint.proxy());
+// componentContext.expects(atLeastOnce()).method("deactivateEndpoint").with(eq(serviceEndpoint.proxy()));
+// instance.deactivateEndpoint(endpoint);
+// componentContext.verify();
+// System.out.println("Successfully tested deactivateEndpoint for an outbound endpoint");
+//
+// // 2. testing the scenario where endpoint type is inbound
+// endpoint.setEndpointType(0);
+// try {
+// instance.deactivateEndpoint(endpoint);
+// System.out.println("Successfully tested deactivateEndpoint for an inbound endpoint");
+// } catch (Exception e) {
+// fail("Failed to test deactivateEndpoint for an inbound endpoint");
+// }
+// }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/FileBindingBootstrapTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/FileBindingBootstrapTest.java
new file mode 100644
index 000000000..7a8151dc9
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/FileBindingBootstrapTest.java
@@ -0,0 +1,176 @@
+#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})FileBindingBootstrapTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.bootstrap;
+
+import junit.framework.*;
+import java.util.Hashtable;
+import java.util.logging.Logger;
+import javax.jbi.component.ComponentContext;
+import javax.jbi.component.InstallationContext;
+import javax.jbi.management.MBeanNames;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import javax.management.StandardMBean;
+import org.jmock.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileBindingBootstrapTest extends org.jmock.cglib.MockObjectTestCase {
+
+ FileBindingBootstrap instance = null;
+ ObjectName objectName = null;
+ Mock context = mock(InstallationContext.class);
+ Mock componentContext = mock(ComponentContext.class);
+ Mock mbServer = mock(MBeanServer.class);
+ Mock mbNames = mock(MBeanNames.class);
+ Mock installerExtMbean = mock(InstallerExtMBean.class);
+
+ public FileBindingBootstrapTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new FileBindingBootstrap();
+ Hashtable table = new Hashtable();
+ table.put("someKey", "someValue");
+ objectName = new ObjectName("someObjectName", table);
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileBindingBootstrapTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of init method, of class com.sun.jbi.filebc.bootstrap.FileBindingBootstrap.
+ */
+ public void testInit() throws Exception {
+ System.out.println("Testing init");
+
+// Mock componentConfig = mock(ComponentConfig.class);
+// Mock defaultProperties = mock(ComponentConfig.class);
+
+ String installRoot = "test/com/sun/jbi/filebc/bootstrap";
+
+ // 1. testing the success scenario
+ context.expects(atLeastOnce()).method("getContext").will(returnValue(componentContext.proxy()));
+// installerExtMbean.expects(atLeastOnce()).method("setInitialConfigurations").with(isA(ComponentConfig.class));
+
+ componentContext.expects(atLeastOnce()).method("getLogger").with(eq(FileBindingBootstrap.class.getName()), eq("com.sun.jbi.filebc.bootstrap.messages.Bundle")).will(returnValue(Logger.getLogger(FileBindingBootstrap.class.getName(), "com.sun.jbi.filebc.bootstrap.messages.Bundle")));
+ componentContext.expects(atLeastOnce()).method("getLogger").with(eq("com.sun.jbi.filebc.bootstrap.InstallerExt"), eq("com.sun.jbi.filebc.bootstrap.messages.Bundle")).will(returnValue(Logger.getLogger("com.sun.jbi.filebc.bootstrap.InstallerExt", "com.sun.jbi.filebc.bootstrap.messages.Bundle")));
+ componentContext.expects(atLeastOnce()).method("getMBeanServer").will(returnValue(mbServer.proxy()));
+ componentContext.expects(atLeastOnce()).method("getMBeanNames").will(returnValue(mbNames.proxy()));
+ mbNames.expects(atLeastOnce()).method("createCustomComponentMBeanName").with(eq(MBeanNames.BOOTSTRAP_EXTENSION)).will(returnValue(objectName));
+ mbServer.expects(atLeastOnce()).method("isRegistered").with(eq(objectName)).will(returnValue(false));
+ mbServer.expects(atLeastOnce()).method("registerMBean").with(isA(StandardMBean.class), eq(objectName));
+ context.expects(atLeastOnce()).method("getInstallRoot").will(returnValue(installRoot));
+// componentConfig.expects(atLeastOnce()).method("parse").with(eq(installRoot)).will(returnValue(defaultProperties.proxy()));
+ try {
+ instance.init((InstallationContext) context.proxy());
+ System.out.println("Successfully tested init for the scenario where no exception is expected.");
+ } catch (Exception e) {
+ fail("Failed to test init for the scenario where no exception is expected due to: " + e.getMessage());
+ }
+// componentConfig.verify();
+ mbServer.verify();
+ mbNames.verify();
+ context.verify();
+
+ // 2. testing the failure scenario
+ mbServer.expects(once()).method("registerMBean").with(isA(StandardMBean.class), eq(objectName)).will(throwException(new MBeanRegistrationException(new Exception(), "someException")));
+ try {
+ instance.init((InstallationContext) context.proxy());
+ fail("Failed to test init when an exception should be caught - a MBeanRegistrationException is raised.");
+ } catch (Exception e) {
+ System.out.println("Successfully tested init when an exception is raised.");
+ }
+ mbServer.verify();
+ mbNames.verify();
+ context.verify();
+ }
+
+ /**
+ * Test of onInstall method, of class com.sun.jbi.filebc.bootstrap.FileBindingBootstrap.
+ */
+// public void testOnInstall() throws Exception {
+// System.out.println("Testing onInstall");
+//
+// Mock documentFragment = mock(DocumentFragment.class);
+// Mock nodelist = mock(NodeList.class);
+// nodelist.expects(atLeastOnce()).method("getLength").will(returnValue(0));
+// documentFragment.expects(atLeastOnce()).method("getChildNodes").will(returnValue(nodelist.proxy()));
+// context.expects(once()).method("getContext").will(returnValue(componentContext.proxy()));
+// context.expects(once()).method("getInstallationDescriptorExtension").will(returnValue(documentFragment.proxy()));
+// componentContext.expects(atLeastOnce()).method("getMBeanServer").will(returnValue(mbServer.proxy()));
+// componentContext.expects(once()).method("getWorkspaceRoot").will(returnValue("test/com/sun/jbi/filebc/testDir"));
+// mbServer.expects(once()).method("getMBeanInfo").will(returnValue(null));
+// instance.setInstallationContext((InstallationContext)context.proxy());
+// try {
+// instance.onInstall();
+// System.out.println("Successfully tested onInstall.");
+// } catch (Exception e) {
+// fail("Failed to test onInstall due to: " + e.getMessage());
+// }
+// context.verify();
+// componentContext.verify();
+// }
+ /**
+ * Test of cleanUp method, of class com.sun.jbi.filebc.bootstrap.FileBindingBootstrap.
+ */
+ public void testCleanUp() throws Exception {
+ System.out.println("Testing cleanUp");
+
+ context.expects(once()).method("getContext").will(returnValue(componentContext.proxy()));
+ componentContext.expects(atLeastOnce()).method("getMBeanServer").will(returnValue(mbServer.proxy()));
+ mbServer.expects(atLeastOnce()).method("isRegistered").with(eq(objectName)).will(returnValue(true));
+ mbServer.expects(atLeastOnce()).method("unregisterMBean").with(eq(objectName));
+ instance.setInstallationContext((InstallationContext) context.proxy());
+ instance.setMBeanObjectName(objectName);
+
+ try {
+ instance.cleanUp();
+ System.out.println("Successfully tested cleanUp.");
+ } catch (Exception e) {
+ fail("Failed to test cleanUp due to: " + e.getMessage());
+ }
+ context.verify();
+ componentContext.verify();
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/InstallerExtTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/InstallerExtTest.java
new file mode 100644
index 000000000..02a7d1e15
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/InstallerExtTest.java
@@ -0,0 +1,74 @@
+#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})InstallerExtTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.bootstrap;
+
+import junit.framework.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class InstallerExtTest extends TestCase {
+
+ InstallerExt instance = new InstallerExt();
+
+ public InstallerExtTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(InstallerExtTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of setThreads and getThreads method, of class com.sun.jbi.filebc.bootstrap.InstallerExt.
+ */
+ public void testSetGetThreads() {
+ System.out.println("Testing setThreads and getThreads");
+
+// String threads = "someNumberOfThreads";
+ Integer threads = new Integer(10);
+ instance.setThreads(threads);
+// String result = instance.getThreads();
+ Integer result = instance.getThreads();
+ assertEquals(threads, result);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/META-INF/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/META-INF/jbi.xml
new file mode 100644
index 000000000..dfa657ac3
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/META-INF/jbi.xml
@@ -0,0 +1,120 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+
+
+
+
+
+
+
+ sun-file-binding
+ File binding
+
+
+ com.sun.jbi.filebc.FileBindingLifeCycle
+
+ lib/wsdl4j.jar
+ lib/${artifactId}.jar
+ lib/resolver.jar
+ lib/componentsl.jar
+ lib/xsdmodel.jar
+ lib/common-util.jar
+ lib/qos.jar
+
+ com.sun.jbi.filebc.bootstrap.FileBindingBootstrap
+
+ lib/${artifactId}.jar
+ lib/componentsl.jar
+ lib/common-util.jar
+ lib/qos.jar
+
+ sun-encoder-library
+
+ com.sun.jbi.filebc.FileBindingDeployer
+ com.sun.jbi.filebc.FileBindingLifeCycle
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileAddressTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileAddressTest.java
new file mode 100644
index 000000000..da98dd9b4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileAddressTest.java
@@ -0,0 +1,114 @@
+#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})FileAddressTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.extensions;
+
+import junit.framework.*;
+import javax.xml.namespace.QName;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileAddressTest extends TestCase {
+
+ FileAddress instance = null;
+
+ public FileAddressTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new FileAddress();
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileAddressTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of setElementType and getElementType method, of class com.sun.jbi.filebc.extensions.FileAddress.
+ */
+ public void testSetGetElementType() {
+ System.out.println("Testing setElementType and getElementType");
+
+ // 1. testing the default value of element type
+ QName expResult = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", "address");
+ QName result = instance.getElementType();
+ assertEquals(expResult, result);
+
+ // 2. testing setElementType
+ QName val = new QName("http://my-file-address-test", "address");
+ expResult = new QName("http://my-file-address-test", "address");
+ instance.setElementType(val);
+ result = instance.getElementType();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setElementType and getElementType");
+ }
+
+ /**
+ * Test of setRequired and getRequired method, of class com.sun.jbi.filebc.extensions.FileAddress.
+ */
+ public void testSetGetRequired() {
+ System.out.println("Testing setRequired and getRequired");
+
+ Boolean val = Boolean.TRUE;
+ Boolean expResult = Boolean.TRUE;
+ instance.setRequired(val);
+ Boolean result = instance.getRequired();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setRequired and getRequired");
+ }
+
+ /**
+ * Test of setFileDirectory and getFileDirectory method, of class com.sun.jbi.filebc.extensions.FileAddress.
+ */
+ public void testSetGetFileDirectory() {
+ System.out.println("Testing setInputDir and getInputDir");
+
+ String val = "c:/myfiletest/myDir";
+ ;
+ String expResult = "c:/myfiletest/myDir";
+ instance.setFileDirectory(val);
+ String result = instance.getFileDirectory();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setInputDir and getInputDir");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileBindingTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileBindingTest.java
new file mode 100644
index 000000000..4d8c8a1b8
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileBindingTest.java
@@ -0,0 +1,115 @@
+#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})FileBindingTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.extensions;
+
+import junit.framework.*;
+import javax.xml.namespace.QName;
+
+import com.ibm.wsdl.Constants;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileBindingTest extends TestCase {
+
+ FileBinding instance = null;
+
+ public FileBindingTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new FileBinding();
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileBindingTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of setElementType and getElementType method, of class com.sun.jbi.filebc.extensions.FileBinding.
+ */
+ public void testSetGetElementType() {
+ System.out.println("Testing setElementType and getElementType");
+
+ // 1. testing default element type value
+ QName expResult = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", Constants.ELEM_BINDING);
+ QName result = instance.getElementType();
+ assertEquals(expResult, result);
+
+ // 2. testing setElementType
+ QName val = new QName("http://my-file-binding/test", Constants.ELEM_BINDING);
+ expResult = new QName("http://my-file-binding/test", Constants.ELEM_BINDING);
+ instance.setElementType(val);
+ result = instance.getElementType();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setElementType and getElementType");
+ }
+
+ /**
+ * Test of setRequired and getRequired method, of class com.sun.jbi.filebc.extensions.FileBinding.
+ */
+ public void testSetGetRequired() {
+ System.out.println("Testing setRequired and getRequired");
+
+ Boolean expResult = Boolean.FALSE;
+ instance.setRequired(Boolean.FALSE);
+ Boolean result = instance.getRequired();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setRequired and getRequired");
+ }
+
+ /**
+ * Test of toString method, of class com.sun.jbi.filebc.extensions.FileBinding.
+ */
+ public void testToString() {
+ System.out.println("Testing toString");
+
+ String expResult = "FileBinding {http://my-file-binding/test}binding:" +
+ "${symbol_escape}nRequired=false";
+ instance.setElementType(new QName("http://my-file-binding/test", Constants.ELEM_BINDING));
+ instance.setRequired(Boolean.FALSE);
+ String result = instance.toString();
+ assertTrue(result.indexOf(expResult) > 0);
+
+ System.out.println("Successfully tested toString");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileExtSerializerTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileExtSerializerTest.java
new file mode 100644
index 000000000..68ba9d8be
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileExtSerializerTest.java
@@ -0,0 +1,298 @@
+#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})FileExtSerializerTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.extensions;
+
+import junit.framework.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.ExtensionRegistry;
+import javax.wsdl.Definition;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import com.ibm.wsdl.Constants;
+import com.ibm.wsdl.factory.WSDLFactoryImpl;
+
+import org.apache.xml.resolver.CatalogManager;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileExtSerializerTest extends TestCase {
+
+ Class parentType = null;
+ Definition def = null;
+ ExtensionRegistry extReg = null;
+ FileExtSerializer instance = null;
+ QName bindingElementType = null;
+ QName bindingOperationElementType = null;
+ QName addressElementType = null;
+ QName messageElementType = null;
+ Document doc = null;
+ WSDLFactory wsdlFactory = null;
+ WSDLReader reader = null;
+ String outputFolder = null;
+ String expectedFolder = null;
+
+ public FileExtSerializerTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new FileExtSerializer();
+ extReg = new ExtensionRegistry();
+ bindingElementType = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", Constants.ELEM_BINDING);
+ bindingOperationElementType = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", Constants.ELEM_OPERATION);
+ addressElementType = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", "address");
+ messageElementType = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", "message");
+ outputFolder = "test/com/sun/jbi/filebc/extensions/output/";
+ expectedFolder = "test/com/sun/jbi/filebc/extensions/expected/";
+ BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(new File("test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl")), "UTF-8"));
+ wsdlFactory = WSDLFactory.newInstance();
+ reader = ((WSDLFactoryImpl) wsdlFactory).newWSDLReader(new CatalogResolver(new CatalogManager()));
+ def = reader.readWSDL(new File("test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl").getAbsolutePath());
+ try {
+ InputSource is = new InputSource(br);
+ DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+ DocumentBuilder db;
+ synchronized (dbf) {
+ dbf.setNamespaceAware(true);
+ db = dbf.newDocumentBuilder();
+ }
+ doc = db.parse(is);
+
+ } catch (Exception e) {
+ fail("Something went wrong during parsing TestFile.wsdl, cannot proceed");
+ }
+
+ if (doc == null) {
+ fail("Something went wrong during parsing TestFile.wsdl, cannot proceed");
+ }
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileExtSerializerTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of marshall method, of class com.sun.jbi.filebc.extensions.FileExtSerializer.
+ */
+ public void testMarshall() throws Exception {
+ System.out.println("Testing marshall");
+ ExtensibilityElement elem = null;
+ String outputFileName = null;
+ String expectedOutputFileName = null;
+ PrintWriter pw = null;
+
+ // 1. testing file:binding extensibility element
+ elem = new FileBinding();
+ outputFileName = outputFolder + "TestFileBindingElement.xml";
+ expectedOutputFileName = expectedFolder + "FileBindingElement.xml";
+ pw = new PrintWriter(new FileOutputStream(new File(outputFileName)));
+ instance.marshall(null, null, elem, pw, def, extReg);
+ pw.flush();
+
+ System.out.println("======== expected output is [" + getFileContents(expectedOutputFileName) + "] and actual output is [" + getFileContents(outputFileName) + "]");
+ assertEquals(getFileContents(expectedOutputFileName).trim(), getFileContents(outputFileName).trim());
+
+ // 2. testing file:operation extensibility element
+ elem = new FileOperation();
+ outputFileName = outputFolder + "TestFileOperationElement.xml";
+ expectedOutputFileName = expectedFolder + "FileOperationElement.xml";
+
+ elem.setRequired(Boolean.TRUE);
+
+ pw = new PrintWriter(new FileOutputStream(new File(outputFileName)));
+ instance.marshall(null, null, elem, pw, def, extReg);
+ pw.flush();
+
+ assertEquals(getFileContents(expectedOutputFileName).trim(), getFileContents(outputFileName).trim());
+
+ // 3. testing file:messag extensibility element
+ outputFileName = outputFolder + "TestFileMessageElement.xml";
+ expectedOutputFileName = expectedFolder + "FileMessageElement.xml";
+
+ elem = new FileMessage();
+ ((FileMessage) elem).setFileName("FileBCInput.txt");
+ ((FileMessage) elem).setFileNameIsPattern(Boolean.TRUE);
+ ((FileMessage) elem).setPollingInterval(new Long(9999));
+ ((FileMessage) elem).setMultipleRecordsPerFile(Boolean.TRUE);
+ ((FileMessage) elem).setProtectDirectory("protect");
+
+ pw = new PrintWriter(new FileOutputStream(new File(outputFileName)));
+ instance.marshall(null, null, elem, pw, def, extReg);
+ pw.flush();
+
+ assertEquals(getFileContents(expectedOutputFileName).trim(), getFileContents(outputFileName).trim());
+
+ // 5. testing file:address extensibility element
+ elem = new FileAddress();
+ outputFileName = outputFolder + "TestFileAddressElement.xml";
+ expectedOutputFileName = expectedFolder + "FileAddressElement.xml";
+ elem.setRequired(Boolean.TRUE);
+ ((FileAddress) elem).setFileDirectory("/tmp/testing");
+
+ pw = new PrintWriter(new FileOutputStream(new File(outputFileName)));
+ instance.marshall(null, null, elem, pw, def, extReg);
+ pw.flush();
+
+ String tmp = getFileContents(expectedOutputFileName).trim();
+ System.out.println("=====>" + tmp);
+ String tmp2 = getFileContents(outputFileName).trim();
+ System.out.println("=====>" + tmp2);
+ assertEquals(tmp, tmp2);
+
+ System.out.println("Successfully tested marshal");
+ }
+
+ /**
+ * Test of unmarshall method, of class com.sun.jbi.filebc.extensions.FileExtSerializer.
+ */
+ public void testUnmarshall() throws Exception {
+ System.out.println("Testing unmarshall");
+
+ Element xelem = null;
+ ExtensibilityElement expResult = null;
+ ExtensibilityElement result = null;
+
+ // 1. testing file:binding element
+ xelem = getElement(doc, "file:binding");
+ result = instance.unmarshall(null, bindingElementType, xelem, null, extReg);
+ assertTrue(result instanceof FileBinding);
+
+ // 2. testing file:operation element
+ xelem = getElement(doc, "file:operation");
+ if (xelem != null) {
+ result = instance.unmarshall(null, bindingOperationElementType, xelem, null, extReg);
+ assertTrue(result instanceof FileOperation);
+ FileOperation oper = (FileOperation) result;
+ } else {
+ fail("Something went wrong during parsing TestFile.wsdl, cannot proceed");
+ }
+
+ // 3. testing file:message element
+ xelem = getElement(doc, "file:message");
+
+ if (xelem != null) {
+ result = instance.unmarshall(null, messageElementType, xelem, null, extReg);
+ assertTrue(result instanceof FileMessage);
+ FileMessage fileMessage = (FileMessage) result;
+ assertEquals("FileBCInput.txt", fileMessage.getFileName());
+ assertTrue(fileMessage.getFileNameIsPattern());
+ assertEquals(9999, fileMessage.getPollingInterval().longValue());
+ assertTrue(fileMessage.getMultipleRecordsPerFile());
+ } else {
+ fail("Something went wrong during parsing TestFile.wsdl, cannot proceed");
+ }
+
+ // 5. testing file:address element
+ xelem = getElement(doc, "file:address");
+ if (xelem != null) {
+ result = instance.unmarshall(null, addressElementType, xelem, null, extReg);
+ assertTrue(result instanceof FileAddress);
+ FileAddress address = (FileAddress) result;
+ assertEquals("/tmp/testing", address.getFileDirectory());
+ } else {
+ fail("Something went wrong during parsing TestFile.wsdl, cannot proceed");
+ }
+ System.out.println("Successfully tested unmarshal");
+ }
+
+ private Element getElement(Node aNode, String elementName) {
+ Element theOne = null;
+ if (aNode.getNodeName().equalsIgnoreCase(elementName)) {
+ return (Element) aNode;
+ }
+
+ NodeList children = aNode.getChildNodes();
+ for (int ii = 0; ii < children.getLength(); ii++) {
+ Node child = children.item(ii);
+ if (child.getNodeName().equalsIgnoreCase(elementName)) {
+ theOne = (Element) child;
+ break;
+ } else {
+ theOne = getElement(child, elementName);
+ if (theOne != null) {
+ break;
+ }
+ }
+ }
+ return theOne;
+ }
+
+ private String getFileContents(String fileName) {
+ StringBuffer output = new StringBuffer();
+ try {
+ FileReader reader = new FileReader(fileName);
+ char[] buff = new char[512];
+ int len = reader.read(buff);
+ while (len > 0) {
+ output.append(buff, 0, len);
+ len = reader.read(buff);
+ }
+ } catch (Exception e) {
+ fail("Failed to retrieve content from " + fileName + ".");
+ }
+
+ return output.toString();
+ }
+
+ public void testRemove() throws Exception {
+ String result = instance.removeExtraEscapeCharacter("${symbol_escape}${symbol_escape}${symbol_escape}${symbol_escape}${symbol_escape}${symbol_escape}");
+ assertEquals("${symbol_escape}${symbol_escape}${symbol_escape}${symbol_escape}${symbol_escape}${symbol_escape}", result);
+
+ result = instance.removeExtraEscapeCharacter("${symbol_escape}${symbol_escape}r${symbol_escape}${symbol_escape}n${symbol_escape}${symbol_escape}t${symbol_escape}${symbol_escape}f${symbol_escape}${symbol_escape}b");
+ assertEquals("${symbol_escape}r${symbol_escape}n${symbol_escape}t${symbol_escape}f${symbol_escape}b", result);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileInputTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileInputTest.java
new file mode 100644
index 000000000..95f2250c9
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileInputTest.java
@@ -0,0 +1,74 @@
+#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})FileInputTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.extensions;
+
+import junit.framework.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileInputTest extends TestCase {
+
+ FileInput instance = new FileInput();
+
+ public FileInputTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileInputTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of setFileMessage and getFileMessage method, of class com.sun.jbi.filebc.extensions.FileInput.
+ */
+ public void testSetGetFileMessage() {
+ System.out.println("Testing setFileRead and getFileRead");
+
+ FileMessage fileMessage = new FileMessage();
+ instance.setFileMessage(fileMessage);
+ FileMessage result = instance.getFileMessage();
+ assertEquals(fileMessage, result);
+
+ System.out.println("Successfully tested setFileRead and getFileRead");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOperationTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOperationTest.java
new file mode 100644
index 000000000..7a8b5b8e5
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOperationTest.java
@@ -0,0 +1,116 @@
+#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})FileOperationTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.extensions;
+
+import junit.framework.*;
+import javax.xml.namespace.QName;
+
+import com.ibm.wsdl.Constants;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileOperationTest extends TestCase {
+
+ FileOperation instance = null;
+
+ public FileOperationTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new FileOperation();
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileOperationTest.class);
+ return suite;
+ }
+
+ /**
+ * Test of setElementType and getElementType method, of class com.sun.jbi.filebc.extensions.FileOperation.
+ */
+ public void testSetGetElementType() {
+ System.out.println("Testing setElementType and getElementType");
+
+ // 1. testing default element type value
+ QName expResult = new QName("http://schemas.sun.com/jbi/wsdl-extensions/file/", Constants.ELEM_OPERATION);
+ QName result = instance.getElementType();
+ assertEquals(expResult, result);
+
+ // 2. testing setElementType
+ QName val = new QName("http://file-operation-test/", Constants.ELEM_OPERATION);
+ expResult = new QName("http://file-operation-test/", Constants.ELEM_OPERATION);
+ instance.setElementType(val);
+ result = instance.getElementType();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setElementType and getElementType");
+ }
+
+ /**
+ * Test of setRequired and setgetRequired method, of class com.sun.jbi.filebc.extensions.FileOperation.
+ */
+ public void testSetGetRequired() {
+ System.out.println("Testing setRequired and getRequired");
+
+ Boolean expResult = Boolean.TRUE;
+ instance.setRequired(Boolean.TRUE);
+ Boolean result = instance.getRequired();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested setRequired and getRequired");
+ }
+
+ /**
+ * Test of toString method, of class com.sun.jbi.filebc.extensions.FileOperation.
+ */
+ public void testToString() {
+ System.out.println("Testing toString");
+
+
+ String expResult = "File operation ({http://file-operation-test/}operation):" +
+ "${symbol_escape}nRequired=true";
+ instance.setElementType(new QName("http://file-operation-test/", Constants.ELEM_OPERATION));
+ instance.setRequired(Boolean.TRUE);
+ String result = instance.toString();
+ System.out.println("-------------- result is [" + result + "]");
+ assertTrue(result.indexOf(expResult) > 0);
+
+ System.out.println("Successfully tested toString");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOutputTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOutputTest.java
new file mode 100644
index 000000000..a7ea5c435
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOutputTest.java
@@ -0,0 +1,74 @@
+#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})FileOutputTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.extensions;
+
+import junit.framework.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileOutputTest extends TestCase {
+
+ FileOutput instance = new FileOutput();
+
+ public FileOutputTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(FileOutputTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of setFileMessage and getFileMessage method, of class com.sun.jbi.filebc.extensions.FileInput.
+ */
+ public void testSetGetFileMessage() {
+ System.out.println("Testing setFileRead and getFileRead");
+
+ FileMessage fileMessage = new FileMessage();
+ instance.setFileMessage(fileMessage);
+ FileMessage result = instance.getFileMessage();
+ assertEquals(fileMessage, result);
+
+ System.out.println("Successfully tested setFileRead and getFileRead");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileAddressElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileAddressElement.xml
new file mode 100644
index 000000000..865897ad5
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileAddressElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileBindingElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileBindingElement.xml
new file mode 100644
index 000000000..fa3048383
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileBindingElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileMessageElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileMessageElement.xml
new file mode 100644
index 000000000..2a78d1dcf
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileMessageElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileOperationElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileOperationElement.xml
new file mode 100644
index 000000000..17547b448
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileOperationElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileAddressElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileAddressElement.xml
new file mode 100644
index 000000000..4921dc099
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileAddressElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileBindingElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileBindingElement.xml
new file mode 100644
index 000000000..fa3048383
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileBindingElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileMessageElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileMessageElement.xml
new file mode 100644
index 000000000..b9064707a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileMessageElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileOperationElement.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileOperationElement.xml
new file mode 100644
index 000000000..17547b448
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileOperationElement.xml
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/BadInput.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/BadInput.txt
new file mode 100644
index 000000000..90b2bc0e7
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/BadInput.txt
@@ -0,0 +1,4 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+Hello, bad message here!
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOnly.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOnly.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOnly.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOut.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOut.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOut.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/filebc.lck b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/filebc.lck
new file mode 100644
index 000000000..75df4a225
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/filebc.lck
@@ -0,0 +1 @@
+lock file for testing
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/InputInOnly06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_01/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_011/InputInOnly06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_01/test_recursive_sub_012/InputInOnly06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly01.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly01.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly01.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly02.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly02.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly02.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly03.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly03.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly03.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly04.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly04.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly04.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly05.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly05.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly05.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inonly/test_recursive_sub_02/InputInOnly06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/InputInOut06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_01/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recrusive_skip_sub_dir_021/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_skip_dir_02/test_recursive_sub_022/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_skip_sub_dir_011_extra/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_011/InputInOut06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_01/test_recursive_sub_012/InputInOut06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut01.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut01.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut01.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut02.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut02.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut02.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut03.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut03.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut03.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut04.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut04.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut04.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut05.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut05.dat
new file mode 100644
index 000000000..b03092b1b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut05.dat
@@ -0,0 +1,3 @@
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut06_skip_me.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut06_skip_me.txt
new file mode 100644
index 000000000..058520bd1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/recursive_root_inout/test_recursive_sub_02/InputInOut06_skip_me.txt
@@ -0,0 +1,6 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+ hello, testing InOnly
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/output/sample.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/output/sample.txt
new file mode 100644
index 000000000..712a6a3ac
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/output/sample.txt
@@ -0,0 +1,3 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationFactoryTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationFactoryTest.java
new file mode 100644
index 000000000..ff65afda8
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationFactoryTest.java
@@ -0,0 +1,72 @@
+#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})EndpointConfigurationFactoryTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.packaging;
+
+import junit.framework.*;
+import java.io.File;
+
+/**
+ *
+ * @author sweng
+ */
+public class EndpointConfigurationFactoryTest extends TestCase {
+
+ public EndpointConfigurationFactoryTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(EndpointConfigurationFactoryTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of getEndpointConfiguration method, of class com.sun.jbi.filebc.packaging.EndpointConfigurationFactory.
+ */
+ public void testGetEndpointConfiguration() throws Exception {
+ System.out.println("Testing getEndpointConfiguration");
+
+ String suRootDir = new File("test/com/sun/jbi/filebc/packaging/descriptors").getAbsolutePath();
+ EndpointConfiguration result = EndpointConfigurationFactory.getEndpointConfiguration(suRootDir);
+ assertTrue(result instanceof EndpointConfigurationSUDescriptor);
+
+ System.out.println("Successfully tested getEndpointConfiguration");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationSUDescriptorTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationSUDescriptorTest.java
new file mode 100644
index 000000000..063f1c5ec
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationSUDescriptorTest.java
@@ -0,0 +1,97 @@
+#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})EndpointConfigurationSUDescriptorTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.packaging;
+
+import junit.framework.*;
+import java.util.List;
+
+/**
+ *
+ * @author sweng
+ */
+public class EndpointConfigurationSUDescriptorTest extends TestCase {
+
+ EndpointConfigurationSUDescriptor instance = null;
+
+ public EndpointConfigurationSUDescriptorTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new EndpointConfigurationSUDescriptor("test/com/sun/jbi/filebc/packaging/descriptors");
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(EndpointConfigurationSUDescriptorTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of addEndpoint method, of class com.sun.jbi.filebc.packaging.EndpointConfigurationSUDescriptor.
+ */
+ public void testAddEndpoint() {
+ System.out.println("Testing addEndpoint");
+
+ EndpointData p = new EndpointDataImpl("{http://localhost/filebctest/FileOut}portTypeFileOut",
+ "{http://localhost/filebctest/FileOut}serviceFileOut",
+ "portFileOut",
+ 1);
+ instance.addEndpoint(p);
+ p = new EndpointDataImpl("{http://localhost/filebctest/FileIn}portTypeFileIn",
+ "{http://localhost/filebctest/FileIn}portTypeFileIn",
+ "portFileIn",
+ 0);
+ instance.addEndpoint(p);
+ assertEquals(4, instance.endpoints().size());
+
+ System.out.println("Successfully tested addEndpooint");
+ }
+
+ /**
+ * Test of endpoints method, of class com.sun.jbi.filebc.packaging.EndpointConfigurationSUDescriptor.
+ */
+ public void testEndpoints() {
+ System.out.println("Testing endpoints");
+
+ List result = instance.endpoints();
+ assertEquals(2, result.size());
+ assertTrue(result.get(0) instanceof EndpointData);
+ assertTrue(result.get(1) instanceof EndpointData);
+
+ System.out.println("Successfully tested endpoints");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointDataImplTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointDataImplTest.java
new file mode 100644
index 000000000..2c6aa6898
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointDataImplTest.java
@@ -0,0 +1,117 @@
+#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})EndpointDataImplTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.packaging;
+
+import junit.framework.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class EndpointDataImplTest extends TestCase {
+
+ EndpointDataImpl instance = null;
+
+ public EndpointDataImplTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new EndpointDataImpl("{http://localhost/filebctest/FileOut}portTypeFileOut",
+ "{http://localhost/filebctest/FileOut}serviceFileOut",
+ "portFileOut",
+ 0);
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(EndpointDataImplTest.class);
+
+ return suite;
+ }
+
+ /**
+ * Test of getInterface method, of class com.sun.jbi.filebc.packaging.EndpointDataImpl.
+ */
+ public void testGetInterface() {
+ System.out.println("Testing getInterface");
+
+ String expResult = "{http://localhost/filebctest/FileOut}portTypeFileOut";
+ String result = instance.getInterface();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getInterface");
+
+ }
+
+ /**
+ * Test of getService method, of class com.sun.jbi.filebc.packaging.EndpointDataImpl.
+ */
+ public void testGetService() {
+ System.out.println("Testing getService");
+
+ String expResult = "{http://localhost/filebctest/FileOut}serviceFileOut";
+ String result = instance.getService();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getService");
+ }
+
+ /**
+ * Test of getEndpoint method, of class com.sun.jbi.filebc.packaging.EndpointDataImpl.
+ */
+ public void testGetEndpoint() {
+ System.out.println("Testing getEndpoint");
+
+ String expResult = "portFileOut";
+ String result = instance.getEndpoint();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getEndpoint");
+ }
+
+ /**
+ * Test of getDirection method, of class com.sun.jbi.filebc.packaging.EndpointDataImpl.
+ */
+ public void testGetDirection() {
+ System.out.println("Testing getDirection");
+
+ int expResult = 0;
+ int result = instance.getDirection();
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getDirection");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/WSDLConfigurationsTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/WSDLConfigurationsTest.java
new file mode 100644
index 000000000..e59215965
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/WSDLConfigurationsTest.java
@@ -0,0 +1,234 @@
+#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})WSDLConfigurationsTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.packaging;
+
+import junit.framework.*;
+import com.ibm.wsdl.factory.WSDLFactoryImpl;
+import com.ibm.wsdl.BindingOperationImpl;
+import com.ibm.wsdl.OperationImpl;
+import com.sun.jbi.filebc.Endpoint;
+import com.sun.jbi.filebc.extensions.FileAddress;
+import com.sun.jbi.filebc.extensions.FileBinding;
+import com.sun.jbi.filebc.extensions.FileInput;
+import com.sun.jbi.filebc.extensions.FileOperation;
+import com.sun.jbi.filebc.extensions.FileOutput;
+import com.sun.jbi.filebc.extensions.FileMessage;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Vector;
+import javax.wsdl.Binding;
+import javax.wsdl.BindingOperation;
+import javax.wsdl.Definition;
+import javax.wsdl.factory.WSDLFactory;
+import javax.wsdl.Operation;
+import javax.wsdl.xml.WSDLReader;
+import javax.xml.namespace.QName;
+import org.xml.sax.EntityResolver;
+import org.apache.xml.resolver.CatalogManager;
+import org.apache.xml.resolver.tools.CatalogResolver;
+
+/**
+ * * *
+ * @author sweng
+ */
+public class WSDLConfigurationsTest extends TestCase {
+
+ static final int INBOUND = 0;
+ static final int OUTBOUND = 1;
+ WSDLConfigurations instance;
+ BindingOperation bo;
+ Operation operation;
+ EntityResolver resolver;
+ Definition definition;
+ WSDLReader reader;
+ WSDLFactory wsdlFactory;
+ List endpoints = new ArrayList();
+
+ public WSDLConfigurationsTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp()
+ throws Exception {
+ instance = new WSDLConfigurations("testDir");
+ bo = new BindingOperationImpl();
+ operation = new OperationImpl();
+ resolver = new CatalogResolver(new CatalogManager());
+ wsdlFactory = WSDLFactory.newInstance();
+ reader = ((WSDLFactoryImpl) wsdlFactory).newWSDLReader(resolver);
+ definition = reader.readWSDL((new File("test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl")).getAbsolutePath());
+ }
+
+ protected void tearDown()
+ throws Exception {
+ }
+
+ public static Test suite() {
+ TestSuite suite = new TestSuite(WSDLConfigurationsTest.class);
+ return suite;
+ }
+
+ /**
+ * Test of parseWSDL method, of class com.sun.jbi.filebc.packaging.WSDLConfigurations
+ */
+ public void testParseWSDL() {
+ System.out.println("Testing parseWSDL");
+ Iterator it = null;
+ File aWSDL = new File("test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl");
+ List interfaces = new ArrayList();
+ interfaces.add(new EndpointDataImpl("{urn:FileTest}HelloIF", "{urn:FileTest}MyHelloService", "{urn:FileTest}HelloIFPort", 0));
+ try {
+ List endpoints = instance.parseWSDL(aWSDL, resolver, interfaces, new Vector(), new HashMap());
+ assertEquals(endpoints.size(), 1);
+ assertTrue(endpoints.get(0) instanceof Endpoint);
+ Endpoint ep = (Endpoint) endpoints.get(0);
+ assertEquals("{urn:FileTest}HelloIFPort", ep.getEndpointName());
+ assertEquals("{urn:FileTest}MyHelloService", ep.getServiceName().toString());
+ assertEquals(0, ep.getEndpointType());
+ assertTrue(ep.getFileAddress() instanceof FileAddress);
+ FileAddress address = ep.getFileAddress();
+ assertEquals("/tmp/testing", address.getFileDirectory());
+ assertTrue(ep.getFileBinding() instanceof FileBinding);
+ Map operations = ep.getFileOperations();
+ assertEquals(operations.size(), 1);
+ it = operations.values().iterator();
+ FileOperation operation = (FileOperation) it.next();
+ FileInput fileInput = operation.getFileOperationInput();
+ FileOutput fileOutput = operation.getFileOperationOutput();
+ FileMessage inMessage = fileInput.getFileMessage();
+ FileMessage outMessage = fileOutput.getFileMessage();
+ assertEquals("FileBCInput.txt", inMessage.getFileName());
+ assertEquals(9999, inMessage.getPollingInterval().longValue());
+ assertTrue(inMessage.getMultipleRecordsPerFile());
+ assertTrue(inMessage.getFileNameIsPattern());
+ assertEquals("FileBCOutput.txt", outMessage.getFileName());
+ assertFalse(outMessage.getFileNameIsPattern());
+ assertFalse(outMessage.getMultipleRecordsPerFile());
+ Map meps = ep.getOperationMsgExchangePattern();
+ assertEquals(meps.size(), 1);
+ assertEquals("inout", (String) meps.get(new QName("urn:FileTest", "sayHello")));
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Failed testing parseWSDL due to exception: " + e.getMessage());
+ }
+ System.out.println("Successfully tested parseWSDL");
+ }
+
+ /**
+ * Test of listWSDLFiles method, of class com.sun.jbi.filebc.packaging.WSDLConfigurations.
+ */
+ public void testListWSDLFiles() {
+ System.out.println("Testing listWSDLFiles");
+ File currentDir = new File("test/com/sun/jbi/filebc/packaging/wsdls");
+ List expResult = new ArrayList();
+ expResult.add(new File("test/com/sun/jbi/filebc/packaging/wsdls/TestTrigger.wsdl"));
+ expResult.add(new File("test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/TestFileIn.wsdl"));
+ expResult.add(new File("test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl"));
+ List result = instance.listResourceFiles(currentDir, ".wsdl");
+ assertEquals(expResult.size(), result.size());
+ for (int ii = 0; ii < result.size(); ii++) {
+ File aWSDL = (File) result.get(ii);
+ assertTrue(aWSDL.getPath().endsWith(".wsdl"));
+ }
+ System.out.println("Successfully tested listWSDLFiles");
+ }
+
+ /**
+ * Test of getBinding method, of class com.sun.jbi.filebc.packaging.WSDLConfigurations.
+ */
+ public void testGetBinding() {
+ System.out.println("Testing getBinding");
+ String serviceName = "{urn:FileTest}MyHelloService";
+ String endpointName = "{urn:FileTest}HelloIFPort";
+ Binding result = instance.getBinding(definition, serviceName, endpointName);
+ assertNotNull(result);
+ assertTrue(result.getQName().toString().equals("{urn:FileTest}HelloIFBinding"));
+ assertTrue(result.getPortType().getQName().toString().equals("{urn:FileTest}HelloIF"));
+ System.out.println("Successfully tested getBinding");
+ }
+
+ /**
+ * Test of determineMEP method, of class com.sun.jbi.filebc.packaging.WSDLConfigurations.
+ */
+ public void testDetermineMEP() {
+// System.out.println( "Testing determineMEP" );
+// String expResult = "";
+// String result = "";
+// // testing inbound operations
+// int direction = INBOUND;
+// // 1. test inbound request response type operations
+// operation.setStyle( OperationType.REQUEST_RESPONSE );
+// bo.setOperation( operation );
+// expResult = "inout";
+// result = instance.determineMEP( direction, bo );
+// assertEquals( expResult, result );
+// // 2. test inbound solicit response type operations
+// operation.setStyle( OperationType.SOLICIT_RESPONSE );
+// result = instance.determineMEP( direction, bo );
+// assertEquals( "unsupported", result );
+// // 3. test inbound one way type operations
+// expResult = "inonly";
+// operation.setStyle( OperationType.ONE_WAY );
+// result = instance.determineMEP( direction, bo );
+// assertEquals( expResult, result );
+// // 4. test inbound notification type operations
+// operation.setStyle( OperationType.NOTIFICATION );
+// result = instance.determineMEP( direction, bo );
+// assertEquals( "unsupported", result );
+// // testing outbound operations
+// direction = OUTBOUND;
+// // 5. test outbound request-response type operations
+// operation.setStyle( OperationType.REQUEST_RESPONSE );
+// expResult = "outin";
+// result = instance.determineMEP( direction, bo );
+// assertEquals( expResult, result );
+// // 6. test outbound solicit response type operations
+// operation.setStyle( OperationType.SOLICIT_RESPONSE );
+// result = instance.determineMEP( direction, bo );
+// assertEquals( expResult, result );
+// // 7. test outbound one way type operations
+// operation.setStyle( OperationType.ONE_WAY );
+// expResult = "outonly";
+// result = instance.determineMEP( direction, bo );
+// assertEquals( expResult, result );
+// // 8. test outbound notification type operations
+// operation.setStyle( OperationType.NOTIFICATION );
+// result = instance.determineMEP( direction, bo );
+// assertEquals( expResult, result );
+// System.out.println( "Successfully tested determineMEP" );
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/descriptors/META-INF/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/descriptors/META-INF/jbi.xml
new file mode 100644
index 000000000..2b099c030
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/descriptors/META-INF/jbi.xml
@@ -0,0 +1,10 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/FileInTest.bpel b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/FileInTest.bpel
new file mode 100644
index 000000000..f93255ebf
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/FileInTest.bpel
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'Modified string'
+ $sayHello_Input.result/string
+
+
+ $sayHello_Output.body/byte
+ $sayHello_Input.result/byte
+
+
+ $sayHello_Output.body/short
+ $sayHello_Input.result/short
+
+
+ $sayHello_Output.body/int
+ $sayHello_Input.result/int
+
+
+ $sayHello_Output.body/long
+ $sayHello_Input.result/long
+
+
+ $sayHello_Output.body/negativeInteger
+ $sayHello_Input.result/negativeInteger
+
+
+ $sayHello_Output.body/dateTime
+ $sayHello_Input.result/dateTime
+
+
+ $sayHello_Output.body/nonPositiveInteger
+ $sayHello_Input.result/nonPositiveInteger
+
+
+ $sayHello_Output.body/duration
+ $sayHello_Input.result/duration
+
+
+ $sayHello_Output.body/ENTITIES
+ $sayHello_Input.result/ENTITIES
+
+
+ $sayHello_Output.body/double
+ $sayHello_Input.result/double
+
+
+ $sayHello_Output.body/ENTITY
+ $sayHello_Input.result/ENTITY
+
+
+ $sayHello_Output.body/nonNegativeInteger
+ $sayHello_Input.result/nonNegativeInteger
+
+
+ 2.22
+ $sayHello_Input.result/float
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/TestFileIn.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/TestFileIn.wsdl
new file mode 100644
index 000000000..888b5eb84
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/FileInTest/TestFileIn.wsdl
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl
new file mode 100644
index 000000000..7d1e11a4d
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestTrigger.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestTrigger.wsdl
new file mode 100644
index 000000000..ffa61a3c4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestTrigger.wsdl
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xml
new file mode 100644
index 000000000..d357e4ad7
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xml
@@ -0,0 +1,14 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+
+
+
+ 10
+
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xsd b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xsd
new file mode 100644
index 000000000..921463df8
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xsd
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/config.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/config.properties
new file mode 100644
index 000000000..712a6a3ac
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/config.properties
@@ -0,0 +1,3 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/FileStreamHandlerTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/FileStreamHandlerTest.java
new file mode 100644
index 000000000..9d67c848b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/FileStreamHandlerTest.java
@@ -0,0 +1,680 @@
+#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})FileStreamHandlerTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.util;
+
+import junit.framework.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.PushbackInputStream;
+
+/**
+ *
+ * @author sweng
+ */
+public class FileStreamHandlerTest extends TestCase {
+
+ FileStreamHandler instance;
+
+ public FileStreamHandlerTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of getAllContentsAsBytes method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testGetAllContentsAsBytesCase1() throws Exception {
+ System.out.println("Testing getAllContentsAsBytes case 1");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "SingleRecord.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+
+ // tests the scenario where:
+ // 1. single record per file
+ // 2. maxRecordSize not defined
+ // 3. dropEOL option not defined
+ instance = new FileStreamHandler(false,
+ new byte[]{},
+ -1,
+ inputFile.length());
+
+ byte[] result = instance.getAllContentsAsBytes(aStream);
+ assertTrue("This is a test of Single_Record_Per_File scenario${symbol_escape}r${symbol_escape}n".equals(new String(result)) ||
+ "This is a test of Single_Record_Per_File scenario${symbol_escape}n".equals(new String(result)));
+
+ System.out.println("Successfully tested getAllContentsByBytes case 1");
+ }
+
+ public void testGetAllContentsAsBytesCase2() throws Exception {
+ System.out.println("Testing getAllContentsAsBytes case 2");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "SingleRecord.dat");
+ InputStream aStream = new FileInputStream(inputFile);
+
+ // test the scenario where:
+ // 1. single record per file
+ // 2. maxRecord defined and less than file size
+ // 3. dropEOL option defined but no EOR should be found
+ instance = new FileStreamHandler(true,
+ new byte[]{},
+ 18,
+ inputFile.length());
+ byte[] result = instance.getAllContentsAsBytes(aStream);
+ String expResult = "This is a test of ";
+ System.out.println("Result is [" + result + "]");
+ assertTrue(expResult.equals(new String(result)));
+
+
+ System.out.println("Successfully tested getAllContentsByBytes case 2");
+ }
+
+ public void testGetAllContentsAsBytesCase3() throws Exception {
+ System.out.println("Testing getAllContentsAsBytes case 3");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "SingleRecord.dat");
+ InputStream aStream = new FileInputStream(inputFile);
+
+ // test the scenario where:
+ // 1. single record per file
+ // 2. maxRecord not defined
+ // 3. dropEOL option defined
+ instance = new FileStreamHandler(true,
+ new byte[]{},
+ -1,
+ inputFile.length());
+ byte[] result = instance.getAllContentsAsBytes(aStream);
+ String expResult = "This is a test of Single_Record_Per_File scenario";
+ System.out.println("Result is [" + result + "]");
+ assertTrue(expResult.equals(new String(result)));
+
+
+ System.out.println("Successfully tested getAllContentsByBytes case 3");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase1() throws Exception {
+ System.out.println("Testing readNextRecord case 1");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "FixedLengthRecords.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+ String expResult;
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined with fixed record read size
+ // 3. dropEOL option not defined
+ // 4. record delimiter not defined
+
+ // this case test reading fixed-length multiple records
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{},
+ (long) 8,
+ inputFile.length());
+ expResult = "aaaaaaaa";
+ result = instance.readNextRecord();
+
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the second record
+ expResult = "bbbbbbbb";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the last record
+ expResult = "cccccccc";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+
+ // test using instance.hasMoreRecords() method for remaining data
+ int remainingDataCount = 0;
+ while (instance.hasMoreRecords()) {
+ result = instance.readNextRecord();
+ if (result != null) {
+ remainingDataCount++;
+ }
+ }
+ if ("cccccccc".equals(new String(result))) {
+ fail("Failed to retrieve remaining data records...");
+ }
+ //assertTrue(result.length < 6); // last record has only 6 bytes
+ //assertTrue(remainingDataCount > 3);
+
+ System.out.println("Successfully tested readNextRecord case 1");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase2() throws Exception {
+ System.out.println("Testing readNextRecord case 2");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "FixedLengthRecords.dat");
+ PushbackInputStream aStream = new PushbackInputStream(new FileInputStream(inputFile));
+ String expResult;
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined with fixed record read size
+ // 3. dropEOL option defined as true
+ // 4. record delimiter not defined (not needed)
+ // 5. use the alternative constructor and methods
+ instance = new FileStreamHandler(true,
+ new byte[]{},
+ (long) 8,
+ inputFile.length());
+
+
+ expResult = "aaaaaaaa";
+ result = instance.readNextRecord(aStream);
+
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the second record
+ expResult = "bbbbbbbb";
+ result = instance.readNextRecord(aStream);
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the last record
+ expResult = "cccccccc";
+ result = instance.readNextRecord(aStream);
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+
+ // test using instance.hasMoreRecords() method for remaining data
+ int remainingDataCount = 0;
+ while (instance.hasMoreRecords(aStream)) {
+ result = instance.readNextRecord(aStream);
+ if (result != null) {
+ remainingDataCount++;
+ }
+ }
+ if ("cccccccc".equals(new String(result))) {
+ fail("Failed to retrieve remaining data records...");
+ }
+
+ //assertTrue(result.length == 0);
+ //assertTrue(remainingDataCount == 3);
+
+ System.out.println("Successfully tested readNextRecord case 2");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase3() throws Exception {
+ System.out.println("Testing readNextRecord case 3");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord not defined
+ // 3. dropEOL option not defined
+ // 4. record delimiter defined
+
+
+ // read the first record
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '|', '|'},
+ -1,
+ inputFile.length());
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("This is record number1${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n".equals(new String(result)) ||
+ "This is record number1${symbol_escape}n${symbol_escape}n".equals(new String(result)));
+
+ // read the second record
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("${symbol_escape}r${symbol_escape}nThis is record number 2".equals(new String(result)) ||
+ "${symbol_escape}nThis is record number 2".equals(new String(result)));
+
+ // read the last record
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("This is record number3${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n".equals(new String(result)) ||
+ "This is record number3${symbol_escape}n${symbol_escape}n".equals(new String(result)));
+
+ System.out.println("Successfully tested readNextRecord case 3");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase4() throws Exception {
+ System.out.println("Testing readNextRecord case 4");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+ //String expResult;
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined
+ // 3. dropEOL option not defined
+ // 4. record delimiter defined
+
+ // tests the scenario where maxRecordSize
+ // is less than the actual data size
+ // read the first record
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '|', '|'},
+ 22,
+ inputFile.length());
+ //expResult = "This is record number1";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("This is record number1".equals(new String(result)));
+
+ // read the second record
+ //expResult = "${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n".equals(new String(result)) ||
+ "${symbol_escape}n${symbol_escape}n".equals(new String(result)));
+
+
+ // read the last record
+ //expResult = "${symbol_escape}r${symbol_escape}nThis is record numbe";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("${symbol_escape}r${symbol_escape}nThis is record numbe".equals(new String(result)) ||
+ "${symbol_escape}nThis is record number".equals(new String(result)));
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined
+ // 3. dropEOL option defined to be true
+ // 4. record delimiter defined
+ // 5. tests the scenario where maxRecordSize
+ // is larger than the actual data size
+ aStream = new FileInputStream(inputFile);
+ instance = new FileStreamHandler(aStream,
+ true,
+ new byte[]{'|', '|', '|'},
+ 50,
+ inputFile.length());
+
+ // read the first record
+ //expResult = "This is record number1${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("This is record number1${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n".equals(new String(result)) ||
+ "This is record number1${symbol_escape}n${symbol_escape}n".equals(new String(result)));
+
+ // read the second record
+ //expResult = "${symbol_escape}r${symbol_escape}nThis is record number 2";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("${symbol_escape}r${symbol_escape}nThis is record number 2".equals(new String(result)) ||
+ "${symbol_escape}nThis is record number 2".equals(new String(result)));
+
+ // read the last record
+ //expResult = "This is record number3${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("This is record number3${symbol_escape}r${symbol_escape}n${symbol_escape}r${symbol_escape}n".equals(new String(result)) ||
+ "This is record number3${symbol_escape}n${symbol_escape}n".equals(new String(result)));
+
+ System.out.println("Successfully tested readNextRecord case 4");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase5() throws Exception {
+ System.out.println("Testing readNextRecord case 5");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords2.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+ String expResult;
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined
+ // 3. dropEOL option not defined
+ // 4. record delimiter defined
+
+ // tests the scenario where partial EOR
+ // bytes are present in the data records
+
+ // read the first record
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '|', '|'},
+ 22,
+ inputFile.length());
+ expResult = "This |is record number";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the second record
+ expResult = "1";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+
+ //expResult = "${symbol_escape}r${symbol_escape}nThis is re||cord num";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue("${symbol_escape}r${symbol_escape}nThis is re||cord num".equals(new String(result)) ||
+ "${symbol_escape}nThis is re||cord numb".equals(new String(result)));
+
+// expResult = "ber 2";
+// result = instance.readNextRecord();
+// if (result == null) {
+// fail("Unexpected IO error has occurred");
+// }
+// assertTrue(expResult.equals(new String(result)));
+
+ System.out.println("Successfully tested readNextRecord case 5");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase6() throws Exception {
+ System.out.println("Testing readNextRecord case 6");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords3.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+ String expResult;
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined
+ // 3. dropEOL defined
+ // 4. record delimiter defined
+
+ // tests the scenario where maxRecordSize
+ // is less than the actual data size
+ // read the first record
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'&', '&'},
+ 10,
+ inputFile.length());
+ expResult = "This is re";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the second record
+ expResult = "cord numbe";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+
+ expResult = "r 1";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ //expResult = "2ndRecord${symbol_escape}r";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue((new String(result).indexOf("2ndRecord") == 0));
+
+ System.out.println("Successfully tested readNextRecord case 6");
+ }
+
+ /**
+ * Test of readNextRecord method, of class com.sun.jbi.filebc.util.FileStreamHandler.
+ */
+ public void testReadNextRecordCase7() throws Exception {
+ System.out.println("Testing readNextRecord case 7");
+
+ File inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords4.dat");
+ FileInputStream aStream = new FileInputStream(inputFile);
+ String expResult;
+ byte[] result;
+
+ // test the scenario where:
+ // 1. multiple records per file
+ // 2. maxRecord defined
+ // 3. dropEOL defined
+ // 4. record delimiter defined
+
+ // tests the scenario max record size is
+ // less than actual data size and partial
+ // EOR sequence is found at the boundary of
+ // read buffers
+
+ // test the scenario when EOR is found
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '|', '|'},
+ 10,
+ inputFile.length());
+ expResult = "aaaaaaa";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // read the second record
+ expResult = "bbbbbb";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+
+ expResult = "cccccccccc";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+
+
+ // test the scenario where EOR is not found
+ inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords5.dat");
+ aStream = new FileInputStream(inputFile);
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '|', '|'},
+ 10,
+ inputFile.length());
+ expResult = "aaaaaaa||a";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "bbbbbb";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "cccccccccc";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "ccccccccc";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // test the scenario where EOR is not found
+ // but partial EOR sequence at max record size limit
+ inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords6.dat");
+ aStream = new FileInputStream(inputFile);
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '|', '|'},
+ 10,
+ inputFile.length());
+ expResult = "aaaaaaaaa|";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "aabbbbbb";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "cccccccccc";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ // test the scenario partial EOR is embedded in data
+ inputFile = new File("test/com/sun/jbi/filebc/util/testInput", "MultipleRecords7.dat");
+ aStream = new FileInputStream(inputFile);
+ instance = new FileStreamHandler(aStream,
+ false,
+ new byte[]{'|', '&', '^', '${symbol_dollar}'},
+ 100,
+ inputFile.length());
+ expResult = "This |&is record |&^number 1";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "This is record number2";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "This is rec&&ord number3333333333333333333333333333333333333333333333";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ expResult = "This is the last record";
+ result = instance.readNextRecord();
+ if (result == null) {
+ fail("Unexpected IO error has occurred");
+ }
+ assertTrue(expResult.equals(new String(result)));
+
+ System.out.println("Successfully tested readNextRecord case 7");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/InputFilenameFilterTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/InputFilenameFilterTest.java
new file mode 100644
index 000000000..261fa9490
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/InputFilenameFilterTest.java
@@ -0,0 +1,204 @@
+#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})InputFilenameFilterTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.util;
+
+import junit.framework.*;
+import java.io.File;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ *
+ * @author sweng
+ */
+public class InputFilenameFilterTest extends TestCase {
+
+ InputFilenameFilter instance;
+ InputFilenameFilter instance2;
+
+ public InputFilenameFilterTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ instance = new InputFilenameFilter();
+ AtomicInteger maxFiles = new AtomicInteger(20);
+ instance2 = new InputFilenameFilter("file%d.txt", "", maxFiles, false);
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of setFilterExpression and getFilterExpression method, of class com.sun.jbi.filebc.util.InputFilenameFilter.
+ */
+ public void testSetGetFilterExpression() throws Exception {
+ System.out.println("Testing setFilterExpression");
+ String filename;
+ String expResult;
+ String result = "";
+
+ // test %t
+ filename = "Input%tABC.txt";
+ expResult = "Input[0-9]{4,4}(0[1-9]|1[0-2])([0-2][0-9]|3[0-1])(${symbol_escape}${symbol_escape}-(0[0-9]|1[0-9]|2[0-3])${symbol_escape}${symbol_escape}-[0-5][0-9]${symbol_escape}${symbol_escape}-[0-5][0-9]${symbol_escape}${symbol_escape}-[0-9]{0,3})?ABC${symbol_escape}${symbol_escape}.txt";
+ try {
+ instance.setFilterExpression(filename);
+ result = instance.getFilterExpression();
+ } catch (Exception e) {
+ fail("Failed to test setFilterExpression");
+ }
+ assertEquals(expResult, result);
+
+ // test %d
+ filename = "Input%d.dat";
+ expResult = "Input[0-9]+${symbol_escape}${symbol_escape}.dat";
+ try {
+ instance.setFilterExpression(filename);
+ result = instance.getFilterExpression();
+ } catch (Exception e) {
+ fail("Failed to test setFilterExpression");
+ }
+ assertEquals(expResult, result);
+
+ // test %u
+ filename = "Input%uSomething.dat";
+ expResult = "Input" + FileNamePatternUtil.IB_UUID_REGEX + "Something${symbol_escape}${symbol_escape}.dat";
+ try {
+ instance.setFilterExpression(filename);
+ result = instance.getFilterExpression();
+ } catch (Exception e) {
+ fail("Failed to test setFilterExpression");
+ }
+ assertEquals(expResult, result);
+ System.out.println("Successfully testing setFilterExpression");
+ }
+
+ /**
+ * Test of accept method, of class com.sun.jbi.filebc.util.InputFilenameFilter.
+ */
+ public void testAccept() {
+ System.out.println("Testing accept");
+
+ boolean result = false;
+
+ try {
+ instance2.setFilterExpression("Input%d.dat");
+ result = instance2.accept(new File("."), "Input12394828738.dat");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Faile to test accept method");
+ }
+ assertTrue(result);
+
+ try {
+ result = instance2.accept(new File("."), "Input12394828738something.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+ assertFalse(result);
+
+ try {
+ instance2.setFilterExpression("Input%u.dat");
+ result = instance2.accept(new File("."), "Input67e9e747-ee91-4669-9ae1-1048785f6f9e.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertTrue(result);
+
+ try {
+ instance2.setFilterExpression("Input%t.dat");
+ result = instance2.accept(new File("."), "Input19680528-12-36-36-001.dat");
+ } catch (Exception e) {
+ e.printStackTrace();
+ fail("Faile to test accept method");
+ }
+
+ assertTrue(result);
+
+ try {
+ instance2.setFilterExpression("Input%tsomething.dat");
+ result = instance2.accept(new File("."), "Input19680528-12-36-36-001something.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertTrue(result);
+
+ try {
+ instance2.setFilterExpression("Input%t.dat");
+ result = instance2.accept(new File("."), "Input19681528-12-36-36-001.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertFalse(result);
+
+ try {
+ instance2.setFilterExpression("Input%t.dat");
+ result = instance2.accept(new File("."), "Input19680528-24-36-36-001.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertFalse(result);
+
+ try {
+ instance2.setFilterExpression("Input%t.dat");
+ result = instance2.accept(new File("."), "Input19680528-12-60-36-001.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertFalse(result);
+
+ try {
+ instance2.setFilterExpression("Input%t.dat");
+ result = instance2.accept(new File("."), "Input19680528-12-36-36-001.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertTrue(result);
+
+ try {
+ instance2.setFilterExpression("Input%t.dat");
+ result = instance2.accept(new File("."), "Input19680528.dat");
+ } catch (Exception e) {
+ fail("Faile to test accept method");
+ }
+
+ assertTrue(result);
+
+ System.out.println("Successfully tested accept");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/OutputFilenameFormatterTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/OutputFilenameFormatterTest.java
new file mode 100644
index 000000000..fe86eb392
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/OutputFilenameFormatterTest.java
@@ -0,0 +1,121 @@
+#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})OutputFilenameFormatterTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.util;
+
+import junit.framework.*;
+
+/**
+ *
+ * @author sweng
+ */
+public class OutputFilenameFormatterTest extends TestCase {
+
+ public OutputFilenameFormatterTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of getNextOutputFileName method, of class com.sun.jbi.filebc.util.OutputFilenameFormatter.
+ */
+ public void testGetNextOutputFileName() {
+ System.out.println("Testing getNextOutputFileName");
+
+ String expResult = "test0.dat";
+ String result = "";
+
+ try {
+ result = OutputFilenameFormatter.getNextOutputFileName("test%d.dat");
+ } catch (Exception e) {
+ fail("Failed to test getNextOutputFileName.");
+ }
+ assertEquals(expResult, result);
+
+ expResult = "test1.dat";
+ try {
+ result = OutputFilenameFormatter.getNextOutputFileName("test%d.dat");
+ } catch (Exception e) {
+ fail("Failed to test getNextOutputFileName.");
+ }
+ assertEquals(expResult, result);
+
+ expResult = "test2.dat";
+ try {
+ result = OutputFilenameFormatter.getNextOutputFileName("test%d.dat");
+ } catch (Exception e) {
+ fail("Failed to test getNextOutputFileName.");
+ }
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getNextOutputFileName");
+ }
+
+ /**
+ * Test of getOutputFileName method, of class com.sun.jbi.filebc.util.OutputFilenameFormatter.
+ */
+ public void testGetOutputFileName() {
+ System.out.println("Testing getOutputFileName");
+
+ String expResult = "Test0.txt";
+ String result = "";
+ try {
+ result = OutputFilenameFormatter.getOutputFileName("Test%d.txt");
+ } catch (Exception e) {
+ fail("Failed to test GetOutputFileName.");
+ }
+ assertEquals(expResult, result);
+
+ expResult = "dummy0.dat";
+ try {
+ result = OutputFilenameFormatter.getOutputFileName("dummy%d.dat");
+ } catch (Exception e) {
+ fail("Failed to test GetOutputFileName.");
+ }
+ assertEquals(expResult, result);
+
+ expResult = "Test0.txt";
+ try {
+ result = OutputFilenameFormatter.getOutputFileName("Test%d.txt");
+ } catch (Exception e) {
+ fail("Failed to test GetOutputFileName.");
+ }
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested getOutputFileName");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/WSDLUtilitiesTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/WSDLUtilitiesTest.java
new file mode 100644
index 000000000..61e76583d
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/WSDLUtilitiesTest.java
@@ -0,0 +1,76 @@
+#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})WSDLUtilitiesTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package com.sun.jbi.filebc.util;
+
+import junit.framework.*;
+import javax.xml.namespace.QName;
+
+/**
+ *
+ * @author sweng
+ */
+public class WSDLUtilitiesTest extends TestCase {
+
+ public WSDLUtilitiesTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of isBuiltInType method, of class com.sun.jbi.filebc.util.WSDLUtilities.
+ */
+ public void testIsBuiltInType() {
+ System.out.println("Testing isBuiltInType");
+
+ QName typename = QName.valueOf("{http://www.w3.org/2001/XMLSchema}double");
+
+ boolean expResult = true;
+ boolean result = WSDLUtilities.isBuiltInType(typename);
+ assertEquals(expResult, result);
+
+ typename = QName.valueOf("{http://www.w3.org/2001/XMLSchema}string");
+ result = WSDLUtilities.isBuiltInType(typename);
+ assertEquals(expResult, result);
+
+ typename = QName.valueOf("{http://www.w3.org/2001/XMLSchema}ENTITIES");
+ result = WSDLUtilities.isBuiltInType(typename);
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested isBuiltInType");
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/XmlUtilTest.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/XmlUtilTest.java
new file mode 100644
index 000000000..7c3b4c67d
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/XmlUtilTest.java
@@ -0,0 +1,230 @@
+#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})XmlUtilTest.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+
+package com.sun.jbi.filebc.util;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import junit.framework.*;
+import java.io.StringReader;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.Text;
+import org.xml.sax.InputSource;
+
+/**
+ *
+ * @author sweng
+ */
+public class XmlUtilTest extends TestCase {
+ public XmlUtilTest(String testName) {
+ super(testName);
+ }
+
+ protected void setUp() throws Exception {
+ }
+
+ protected void tearDown() throws Exception {
+ }
+
+ /**
+ * Test of createDocument method, of class com.sun.jbi.filebc.util.XmlUtil.
+ */
+ public void testCreateDocument() throws Exception {
+ System.out.println("Testing createDocument");
+
+ Document result = XmlUtil.createDocument(true);
+ assertTrue(result instanceof Document);
+
+ result = XmlUtil.createDocument(true, new InputSource(new StringReader("something")));
+ assertTrue(result instanceof Document);
+ System.out.println("Successfully tested createDocument");
+ }
+
+ /**
+ * Test of createDocumentFromXML method, of class com.sun.jbi.filebc.util.XmlUtil.
+ */
+ public void testCreateDocumentFromXML() throws Exception {
+ System.out.println("Testing createDocumentFromXML");
+
+ boolean namespaceAware = true;
+ String xml = " my test ";
+
+ Document expResult = null;
+ Document result = XmlUtil.createDocumentFromXML(namespaceAware, xml);
+ Element node = result.getDocumentElement();
+ assertEquals("Foo", node.getNodeName());
+ Node child = node.getFirstChild();
+ assertTrue(child instanceof Text);
+ assertEquals(" my test ", ((Text)child).getNodeValue());
+ assertTrue(result instanceof Document);
+
+ System.out.println("Successfully tested createDocumentFromXML");
+ }
+
+ /**
+ * Test of getText method, of class com.sun.jbi.filebc.util.XmlUtil.
+ */
+ public void testGetText() {
+ System.out.println("Testing getText");
+
+ try {
+ InputStream is = new FileInputStream(new File("test/com/sun/jbi/filebc/util/testInput/TestGetText.xml"));
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.parse(is);
+ Node node = document.getDocumentElement();
+
+ String result = XmlUtil.getText((Node)node);
+ assertEquals(" Hello World!!!${symbol_escape}n ${symbol_escape}n ${symbol_escape}n ${symbol_escape}n ${symbol_escape}n ${symbol_escape}n ${symbol_escape}n", result);
+ } catch (Exception e) {
+ fail("Failed to test getText");
+ }
+
+ System.out.println("Successfull tested getText");
+ }
+
+ /**
+ * Test of transformToBytes method, of class com.sun.jbi.filebc.util.XmlUtil.
+ */
+ public void testTransformToBytes() throws Exception {
+ System.out.println("Testing transformToBytes");
+
+ InputStream is = new FileInputStream(new File("test/com/sun/jbi/filebc/util/testInput/TestGetText.xml"));
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.parse(is);
+ Node node = document.getDocumentElement();
+
+ // test with omit xml declaration flag true
+ byte[] expResult = (" Hello World!!!${symbol_escape}r${symbol_escape}n" +
+ " input0${symbol_escape}r${symbol_escape}n" +
+ " a${symbol_escape}r${symbol_escape}n" +
+ " 5${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 2.22${symbol_escape}r${symbol_escape}n" +
+ "${symbol_escape}r${symbol_escape}n").getBytes();
+ byte[] result = XmlUtil.transformToBytes(node, "utf-8", true);
+ for (int ii = 0; ii < expResult.length; ii++) {
+ assertTrue(expResult[ii] == result[ii]);
+ }
+
+ expResult = ("${symbol_escape}r${symbol_escape}n" +
+ " Hello World!!!${symbol_escape}r${symbol_escape}n" +
+ " input0${symbol_escape}r${symbol_escape}n" +
+ " a${symbol_escape}r${symbol_escape}n" +
+ " 5${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 2.22${symbol_escape}r${symbol_escape}n" +
+ "${symbol_escape}r${symbol_escape}n").getBytes();
+ result = XmlUtil.transformToBytes(node, "utf-8", false);
+ for (int ii = 0; ii < expResult.length; ii++) {
+ assertTrue(expResult[ii] == result[ii]);
+ }
+
+ result = XmlUtil.transformToBytes(node, "utf-8", false, "xml");
+ for (int ii = 0; ii < expResult.length; ii++) {
+ assertTrue(expResult[ii] == result[ii]);
+ }
+
+ expResult = ("Hello World!!!").getBytes();
+ node = document.createTextNode("Hello World!!!");
+
+ result = XmlUtil.transformToBytes(node, "utf-8", false, "text");
+ for (int ii = 0; ii < expResult.length; ii++) {
+ assertTrue(expResult[ii] == result[ii]);
+ }
+
+ System.out.println("Successfully tested transformToBytes");
+ }
+
+ /**
+ * Test of transformToString method, of class com.sun.jbi.filebc.util.XmlUtil.
+ */
+ public void testTransformToString() throws Exception {
+ System.out.println("Testing transformToString");
+
+ InputStream is = new FileInputStream(new File("test/com/sun/jbi/filebc/util/testInput/TestGetText.xml"));
+ DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+ factory.setNamespaceAware(true);
+ DocumentBuilder builder = factory.newDocumentBuilder();
+ Document document = builder.parse(is);
+ Node node = document.getDocumentElement();
+
+ // test with omit xml declaration flag true
+ String expResult = " Hello World!!!${symbol_escape}r${symbol_escape}n" +
+ " input0${symbol_escape}r${symbol_escape}n" +
+ " a${symbol_escape}r${symbol_escape}n" +
+ " 5${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 2.22${symbol_escape}r${symbol_escape}n" +
+ "${symbol_escape}r${symbol_escape}n";
+ String result = XmlUtil.transformToString(node, "utf-8", true);
+ System.out.println("expResult is [" + expResult + "]");
+ System.out.println("result is [" + result + "]");
+ assertEquals(expResult, result);
+
+ expResult = "${symbol_escape}r${symbol_escape}n" +
+ " Hello World!!!${symbol_escape}r${symbol_escape}n" +
+ " input0${symbol_escape}r${symbol_escape}n" +
+ " a${symbol_escape}r${symbol_escape}n" +
+ " 5${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 12345${symbol_escape}r${symbol_escape}n" +
+ " 2.22${symbol_escape}r${symbol_escape}n" +
+ "${symbol_escape}r${symbol_escape}n";
+ result = XmlUtil.transformToString(node, "utf-8", false);
+ assertEquals(expResult, result);
+
+ result = XmlUtil.transformToString(node, "utf-8", false, "xml");
+ assertEquals(expResult, result);
+
+ expResult = "Hello World!!!";
+ node = document.createTextNode("Hello World!!!");
+
+ result = XmlUtil.transformToString(node, "utf-8", false, "text");
+ assertEquals(expResult, result);
+
+ System.out.println("Successfully tested transformToString");
+ }
+
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/FixedLengthRecords.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/FixedLengthRecords.dat
new file mode 100644
index 000000000..b1954fdde
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/FixedLengthRecords.dat
@@ -0,0 +1 @@
+aaaaaaaabbbbbbbbccccccccddddddddeeeeeeeefffffff
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords.dat
new file mode 100644
index 000000000..a98ca585f
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords.dat
@@ -0,0 +1,6 @@
+This is record number1
+
+|||
+This is record number 2|||This is record number3
+
+|||
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords2.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords2.dat
new file mode 100644
index 000000000..e7e8849c4
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords2.dat
@@ -0,0 +1,2 @@
+This |is record number1|||
+This is re||cord number 2|||
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords3.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords3.dat
new file mode 100644
index 000000000..f56920290
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords3.dat
@@ -0,0 +1 @@
+This is record number 1&&2ndRecord
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords4.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords4.dat
new file mode 100644
index 000000000..791ca15a1
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords4.dat
@@ -0,0 +1 @@
+aaaaaaa|||bbbbbb|||cccccccccc
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords5.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords5.dat
new file mode 100644
index 000000000..1cbc50cdc
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords5.dat
@@ -0,0 +1 @@
+aaaaaaa||abbbbbb|||ccccccccccccccccccc
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords6.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords6.dat
new file mode 100644
index 000000000..75cab6874
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords6.dat
@@ -0,0 +1 @@
+aaaaaaaaa|aabbbbbb|||ccccccccccccccccccc
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords7.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords7.dat
new file mode 100644
index 000000000..baab83f44
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords7.dat
@@ -0,0 +1 @@
+This |&is record |&^number 1|&^$This is record number2|&^$This is rec&&ord number3333333333333333333333333333333333333333333333|&^$This is the last record
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/SingleRecord.dat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/SingleRecord.dat
new file mode 100644
index 000000000..5ead8734c
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/SingleRecord.dat
@@ -0,0 +1 @@
+This is a test of Single_Record_Per_File scenario
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/TestGetText.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/TestGetText.xml
new file mode 100644
index 000000000..ad7d6b8c3
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/TestGetText.xml
@@ -0,0 +1,11 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+ Hello World!!!
+ input0
+ a
+ 5
+ 12345
+ 12345
+ 2.22
+
\ No newline at end of file
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/Configuration.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/Configuration.java
new file mode 100644
index 000000000..d80dfdda7
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/Configuration.java
@@ -0,0 +1,89 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package test.jbi.integration.test.framework;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Properties;
+
+final public class Configuration {
+
+ private static final String sWorkingDir;
+ private static final String sJbiHost;
+ private static final int sJbiPort;
+ private static final String sJbiUsername;
+ private static final String sJbiPassword;
+ private static final String sJbiTarget;
+ private static final String sJMXServiceURL;
+
+ static {
+
+ InputStream in = Configuration.class.getResourceAsStream("config.properties");
+ Properties prop = new Properties();
+ if (in != null) {
+ try {
+ prop.load(in);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ sWorkingDir = prop.getProperty("WorkingDir", System.getProperty("java.io.tmpdir"));
+ sJbiHost = prop.getProperty("JbiHost", "localhost");
+
+ int port = 8686;
+ try {
+ port = Integer.parseInt(prop.getProperty("JbiPort", "8686"));
+ } catch (Throwable t) {
+ }
+ sJbiPort = port;
+
+ sJbiUsername = prop.getProperty("JbiUsername", "admin");
+ sJbiPassword = prop.getProperty("JbiPassword", "adminadmin");
+ sJbiTarget = prop.getProperty("JbiTarget", "server");
+ sJMXServiceURL = prop.getProperty("JMXServiceURL", "service:jmx:rmi:///jndi/rmi://:8686/jmxrmi");
+
+ }
+
+ public static String getWorkingDir() {
+ return sWorkingDir;
+ }
+
+ public static String getJbiHost() {
+ return sJbiHost;
+ }
+
+ public static int getJbiPort() {
+ return sJbiPort;
+ }
+
+ public static String getJbiUsername() {
+ return sJbiUsername;
+ }
+
+ public static String getJbiPassword() {
+ return sJbiPassword;
+ }
+
+ public static String getJbiTarget() {
+ return sJbiTarget;
+ }
+
+ public static String getJMXServiceURL() {
+ return sJMXServiceURL;
+ }
+
+ public static String getPath(Class cls, String fileName) {
+ //Latter we can change this code to test run integration tests with other JMS providers.
+ //Right now the JMS providers are mentioned in the WSDL. In future we can check some system property
+ //to see which JMS provider we want to test and return the corresponding WSDLS files. May be we can
+ //append the file name with the JMS provider name.
+ URL url = cls.getResource(fileName);
+ if (url == null) {
+ return null;
+ }
+
+ return url.getPath();
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/IntegrationTestCase.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/IntegrationTestCase.java
new file mode 100644
index 000000000..ac34e689a
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/IntegrationTestCase.java
@@ -0,0 +1,55 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package test.jbi.integration.test.framework;
+
+import java.io.Serializable;
+
+import junit.framework.TestCase;
+import test.jbi.integration.testbc.core.Connection;
+import test.jbi.integration.testbc.installer.TestSEInstaller;
+
+import com.sun.jbi.ui.common.JBIRemoteException;
+
+abstract public class IntegrationTestCase extends TestCase implements Serializable {
+
+ transient private String mTestBC;
+ transient private OpenESBInstaller mJbiInstaller;
+ transient private Connection mCon;
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ mJbiInstaller = new OpenESBInstaller(Configuration.getJbiHost(), Configuration.getJbiPort(), Configuration.getJbiUsername(), Configuration.getJbiPassword(),
+ Configuration.getJbiTarget());
+
+ try {
+ //make sure it is uninstalled
+ mJbiInstaller.uninstallComponent("sun-test-engine");
+ } catch (JBIRemoteException ex) {
+ }
+
+ String testBCDir = TestSEInstaller.generateInstaller(Configuration.getWorkingDir());
+
+ mTestBC = mJbiInstaller.installComponent(testBCDir);
+ mTestBC = mJbiInstaller.startComponent(mTestBC);
+
+ mCon = new Connection("localhost", 9888);
+ mCon.start();
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ mCon.close();
+ mJbiInstaller.uninstallComponent(mTestBC);
+ super.tearDown();
+ }
+
+ protected OpenESBInstaller getInstaller() {
+ return mJbiInstaller;
+ }
+
+ protected Connection getConnection() {
+ return mCon;
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/OpenESBInstaller.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/OpenESBInstaller.java
new file mode 100644
index 000000000..fafc87438
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/OpenESBInstaller.java
@@ -0,0 +1,106 @@
+#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})OpenESBAdministrationService.java
+ *
+ * Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
+ *
+ * END_HEADER - DO NOT EDIT
+ */
+package test.jbi.integration.test.framework;
+
+import com.sun.jbi.ui.client.JBIAdminCommandsClientFactory;
+import com.sun.jbi.ui.common.JBIAdminCommands;
+import com.sun.jbi.ui.common.JBIArchive;
+import com.sun.jbi.ui.common.JBIRemoteException;
+import com.sun.jbi.ui.common.ServiceAssemblyDD;
+
+/**
+ *
+ * OpenESB administration service
+ */
+public class OpenESBInstaller {
+
+ private JBIAdminCommands jbiCommands;
+ private String targetName;
+
+ public OpenESBInstaller(String host, int port, String username,
+ String password, String targetName) throws JBIRemoteException {
+ try {
+ jbiCommands = JBIAdminCommandsClientFactory.getInstance(host, port,
+ username, password);
+ this.targetName = targetName;
+ } catch (Throwable t) {
+ throw new JBIRemoteException(t);
+ }
+ }
+
+ public String deployServiceAssembly(String zipFileName) throws Exception {
+ jbiCommands.deployServiceAssembly(zipFileName, targetName);
+ JBIArchive sa = new JBIArchive(zipFileName);
+ return ((ServiceAssemblyDD) sa.getJbiDescriptor()).getName();
+ }
+
+ public void stopServiceAssembly(String saName) throws JBIRemoteException {
+ jbiCommands.stopServiceAssembly(saName, targetName);
+ }
+
+ public void startServiceAssembly(String saName) throws JBIRemoteException {
+ jbiCommands.startServiceAssembly(saName, targetName);
+ }
+
+ public void undeployServiceAssembly(String saName)
+ throws JBIRemoteException {
+ shutdownServiceAssembly(saName);
+ jbiCommands.undeployServiceAssembly(saName, targetName);
+ }
+
+ public void shutdownServiceAssembly(String saName)
+ throws JBIRemoteException {
+ jbiCommands.shutdownServiceAssembly(saName, targetName);
+ }
+
+ public boolean isJBIRuntimeEnabled() throws JBIRemoteException {
+ return jbiCommands.isJBIRuntimeEnabled();
+ }
+
+ public String installComponent(String componentZipFile)
+ throws JBIRemoteException {
+ return jbiCommands.installComponent(componentZipFile, targetName);
+ }
+
+ public String uninstallComponent(String componentName)
+ throws JBIRemoteException {
+ String list = jbiCommands.listBindingComponents(targetName);
+ jbiCommands.shutdownComponent(componentName, targetName);
+ return jbiCommands.uninstallComponent(componentName, targetName);
+ }
+
+ public String startComponent(String componentName)
+ throws JBIRemoteException {
+ return jbiCommands.startComponent(componentName, targetName);
+ }
+}
diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SAAssembler.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SAAssembler.java
new file mode 100644
index 000000000..eb7066f5b
--- /dev/null
+++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SAAssembler.java
@@ -0,0 +1,216 @@
+#set( $symbol_pound = '#' )
+#set( $symbol_dollar = '$' )
+#set( $symbol_escape = '\' )
+package test.jbi.integration.test.framework;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import javax.xml.namespace.QName;
+
+
+import test.jbi.integration.test.framework.SAAssembler.Redelivery.OnFailure;
+import test.jbi.integration.testbc.installer.TestHelper;
+
+public class SAAssembler {
+
+ private static final String DESCRIPTION_END = "${symbol_escape}n";
+ private static final String DESCRIPTION_BEGIN = "";
+ private static final String NAME_END = "${symbol_escape}n";
+ private static final String NAME_BEGIN = "";
+ private static final String XML = "${symbol_escape}n";
+ private static final String BEGIN_JBI = "${symbol_escape}n";
+ private static final String END_JBI = "${symbol_escape}n";
+ private static final String BEGIN_SA = "${symbol_escape}t${symbol_escape}n";
+ private static final String END_SA = "${symbol_escape}t${symbol_escape}n";
+ private static final String BEGIN_ID = "${symbol_escape}t${symbol_escape}t${symbol_escape}n";
+ private static final String END_ID = "${symbol_escape}t${symbol_escape}t${symbol_escape}n";
+ private static final String SERVICE_UNIT_END = "${symbol_escape}t${symbol_escape}t${symbol_escape}n";
+ private static final String SERVICE_UNIT_BEGIN = "${symbol_escape}t${symbol_escape}t${symbol_escape}n";
+ private ArrayList mSus = new ArrayList();
+ private String name;
+ private String description;
+ private ArrayList