From 555243f53901af356fb44c49ebb135da005b3bc4 Mon Sep 17 00:00:00 2001 From: logicoyparam Date: Thu, 8 Aug 2013 16:27:34 +0530 Subject: [PATCH] Maven archtype based on OpenESB existing structure,New project now can be build with OpenESB/Netbeans-SOA builds --- ...veloping_Component_From_Archtype_Guide.txt | 114 ++ ...eloping_Component_From_Archtype_Guide.txt~ | 114 ++ .../pom.xml | 35 + .../META-INF/maven/archetype-metadata.xml | 50 + .../resources/archetype-resources/build.xml | 8 + .../resources/archetype-resources/manifest.mf | 6 + .../nbproject/build-impl.xml | 37 + .../nbproject/genfiles.properties | 8 + .../nbproject/platform.properties | 27 + .../private/platform-private.properties | 1 + .../nbproject/project.properties | 30 + .../archetype-resources/nbproject/project.xml | 56 + .../nbproject/suite.properties | 1 + .../resources/archetype-resources/pom.xml | 95 + ...t.spi.ExtensibilityElementTemplateProvider | 1 + ....modules.xml.wsdl.model.spi.ElementFactory | 6 + ....wsdl.validator.spi.ValidatorSchemaFactory | 1 + ...org.netbeans.modules.xml.xam.spi.Validator | 2 + .../BindingComponentWsdlExt.xsd | 112 ++ .../__artifactId__/Bundle.properties | 21 + .../component/__artifactId__/layer.xml | 86 + .../__artifactId__/model/BindingExt.java | 47 + .../__artifactId__/model/ExtAttribute.java | 53 + .../__artifactId__/model/ExtComponent.java | 35 + .../__artifactId__/model/ExtConstants.java | 47 + .../model/ExtElementFactoryProvider.java | 85 + .../__artifactId__/model/ExtVisitor.java | 25 + .../__artifactId__/model/FaultExt.java | 47 + .../__artifactId__/model/InputExt.java | 47 + .../__artifactId__/model/OperationExt.java | 68 + .../__artifactId__/model/OutputExt.java | 47 + .../__artifactId__/model/PortExt.java | 134 ++ .../__artifactId__/resources/binding-ext.png | Bin 0 -> 449 bytes .../__artifactId__/resources/fault-ext.png | Bin 0 -> 1035 bytes .../__artifactId__/resources/input-ext.png | Bin 0 -> 315 bytes .../resources/operation-ext.png | Bin 0 -> 465 bytes .../__artifactId__/resources/output-ext.png | Bin 0 -> 315 bytes .../__artifactId__/resources/port-ext.png | Bin 0 -> 393 bytes .../__artifactId__/template/Bundle.properties | 12 + .../template/WSDLExtTemplateProvider.java | 24 + .../__artifactId__/template/template.xml | 71 + .../validator/WSDLExtValidator.java | 229 +++ .../WSDLExtValidatorSchemaFactory.java | 43 + .../projects/basic/archetype.properties | 5 + .../test/resources/projects/basic/goal.txt | 0 .../pom.xml | 58 + .../META-INF/maven/archetype-metadata.xml | 114 ++ .../jbiadapter/nbactions.xml | 75 + .../archetype-resources/jbiadapter/pom.xml | 219 +++ .../JMXBindingComponentLifeCycle.java | 52 + .../JMXBindingConsumerEndpoint.java | 153 ++ .../JMXBindingConsumerProxy.java | 237 +++ .../JMXBindingInstaller.java | 34 + .../JMXBindingNormalizer.java | 242 +++ .../JMXBindingProviderEndpoint.java | 87 + .../JMXBindingProviderProxy.java | 235 +++ .../__componentName__/JMXBindingRuntime.java | 57 + .../JMXBindingSUManager.java | 51 + .../JMXBindingServiceUnit.java | 55 + .../JMXBindingWSDLProcessor.java | 43 + .../__componentName__/JMXEndpointMBean.java | 41 + .../AbstractMessageExchangeHandler.java | 141 ++ .../common/BasicComponentLifeCycle.java | 398 +++++ .../common/ComponentInstaller.java | 275 +++ .../common/ComponentRuntime.java | 174 ++ .../DefaultMessageExchangeReceiver.java | 180 ++ .../common/MessageExchangeHandler.java | 31 + .../common/MessageExchangeListener.java | 36 + .../common/MessageExchangeReceiver.java | 47 + .../common/MessageExchangeSupport.java | 170 ++ .../common/RuntimeContext.java | 176 ++ .../common/RuntimeHelper.java | 360 ++++ .../AbstractServiceUnitManager.java | 312 ++++ .../common/deployment/ConsumerEndpoint.java | 208 +++ .../common/deployment/Endpoint.java | 289 +++ .../common/deployment/ProviderEndpoint.java | 107 ++ .../common/deployment/SUDescriptor.java | 364 ++++ .../common/deployment/ServiceUnit.java | 464 +++++ .../wsdl/AbstractExtensibilityElement.java | 44 + .../wsdl/AbstractExtensionRegistry.java | 45 + .../wsdl/AbstractExtensionSerializer.java | 123 ++ .../common/wsdl/AbstractNormalizer.java | 229 +++ .../common/wsdl/SEBindingExt.java | 99 ++ .../common/wsdl/WSDL11JBIWrapper.java | 471 +++++ .../common/wsdl/WSDLProcessor.java | 419 +++++ .../__componentName__/wsdlext/BindingExt.java | 101 ++ .../wsdlext/ExtConstants.java | 52 + .../__componentName__/wsdlext/FaultExt.java | 101 ++ .../__componentName__/wsdlext/InputExt.java | 101 ++ .../wsdlext/OperationExt.java | 121 ++ .../__componentName__/wsdlext/OutputExt.java | 101 ++ .../__componentName__/wsdlext/PortExt.java | 217 +++ .../wsdlext/WSDLExtHelper.java | 223 +++ .../wsdlext/WSDLExtension.xsd | 98 ++ .../wsdlext/WSDLExtensionRegistry.java | 46 + .../com/sun/jbi/filebc/EndpointImplTest.java | 246 +++ .../sun/jbi/filebc/FaultExceptionTest.java | 83 + .../jbi/filebc/FileBindingDeployerTest.java | 246 +++ .../jbi/filebc/FileBindingLifeCycleTest.java | 217 +++ .../sun/jbi/filebc/FileDenormalizerTest.java | 226 +++ .../sun/jbi/filebc/FileNormalizerTest.java | 305 ++++ .../filebc/InboundMessageProcessorTest.java | 1565 +++++++++++++++++ .../sun/jbi/filebc/InboundReceiverTest.java | 315 ++++ .../com/sun/jbi/filebc/ListenerMetaTest.java | 78 + .../filebc/OutboundMessageProcessorTest.java | 704 ++++++++ .../test/com/sun/jbi/filebc/ReceiverTest.java | 103 ++ .../sun/jbi/filebc/ServiceUnitImplTest.java | 211 +++ .../bootstrap/FileBindingBootstrapTest.java | 176 ++ .../filebc/bootstrap/InstallerExtTest.java | 74 + .../sun/jbi/filebc/bootstrap/META-INF/jbi.xml | 120 ++ .../filebc/extensions/FileAddressTest.java | 114 ++ .../filebc/extensions/FileBindingTest.java | 115 ++ .../extensions/FileExtSerializerTest.java | 298 ++++ .../jbi/filebc/extensions/FileInputTest.java | 74 + .../filebc/extensions/FileOperationTest.java | 116 ++ .../jbi/filebc/extensions/FileOutputTest.java | 74 + .../expected/FileAddressElement.xml | 4 + .../expected/FileBindingElement.xml | 4 + .../expected/FileMessageElement.xml | 4 + .../expected/FileOperationElement.xml | 4 + .../output/TestFileAddressElement.xml | 4 + .../output/TestFileBindingElement.xml | 4 + .../output/TestFileMessageElement.xml | 4 + .../output/TestFileOperationElement.xml | 4 + .../com/sun/jbi/filebc/input/BadInput.txt | 4 + .../com/sun/jbi/filebc/input/InputInOnly.txt | 6 + .../com/sun/jbi/filebc/input/InputInOut.txt | 6 + .../test/com/sun/jbi/filebc/input/filebc.lck | 1 + .../recursive_root_inonly/InputInOnly01.txt | 6 + .../recursive_root_inonly/InputInOnly02.txt | 6 + .../recursive_root_inonly/InputInOnly03.txt | 6 + .../recursive_root_inonly/InputInOnly04.txt | 6 + .../recursive_root_inonly/InputInOnly05.txt | 6 + .../InputInOnly06_skip_me.txt | 6 + .../InputInOnly01.txt | 6 + .../InputInOnly02.txt | 6 + .../InputInOnly03.txt | 6 + .../InputInOnly04.txt | 6 + .../InputInOnly05.txt | 6 + .../InputInOnly01.txt | 6 + .../InputInOnly02.txt | 6 + .../InputInOnly03.txt | 6 + .../InputInOnly04.txt | 6 + .../InputInOnly05.txt | 6 + .../InputInOnly01.txt | 6 + .../InputInOnly02.txt | 6 + .../InputInOnly03.txt | 6 + .../InputInOnly04.txt | 6 + .../InputInOnly05.txt | 6 + .../test_recursive_sub_022/InputInOnly01.txt | 6 + .../test_recursive_sub_022/InputInOnly02.txt | 6 + .../test_recursive_sub_022/InputInOnly03.txt | 6 + .../test_recursive_sub_022/InputInOnly04.txt | 6 + .../test_recursive_sub_022/InputInOnly05.txt | 6 + .../test_recursive_sub_01/InputInOnly01.txt | 6 + .../test_recursive_sub_01/InputInOnly02.txt | 6 + .../test_recursive_sub_01/InputInOnly03.txt | 6 + .../test_recursive_sub_01/InputInOnly04.txt | 6 + .../test_recursive_sub_01/InputInOnly05.txt | 6 + .../InputInOnly01.txt | 6 + .../InputInOnly02.txt | 6 + .../InputInOnly03.txt | 6 + .../InputInOnly04.txt | 6 + .../InputInOnly05.txt | 6 + .../test_recursive_sub_011/InputInOnly01.txt | 6 + .../test_recursive_sub_011/InputInOnly02.txt | 6 + .../test_recursive_sub_011/InputInOnly03.txt | 6 + .../test_recursive_sub_011/InputInOnly04.txt | 6 + .../test_recursive_sub_011/InputInOnly05.txt | 6 + .../InputInOnly06_skip_me.txt | 6 + .../test_recursive_sub_012/InputInOnly01.txt | 6 + .../test_recursive_sub_012/InputInOnly02.txt | 6 + .../test_recursive_sub_012/InputInOnly03.txt | 6 + .../test_recursive_sub_012/InputInOnly04.txt | 6 + .../test_recursive_sub_012/InputInOnly05.txt | 6 + .../InputInOnly06_skip_me.txt | 6 + .../test_recursive_sub_02/InputInOnly01.txt | 6 + .../test_recursive_sub_02/InputInOnly02.txt | 6 + .../test_recursive_sub_02/InputInOnly03.txt | 6 + .../test_recursive_sub_02/InputInOnly04.txt | 6 + .../test_recursive_sub_02/InputInOnly05.txt | 6 + .../InputInOnly06_skip_me.txt | 6 + .../recursive_root_inout/InputInOut01.dat | 3 + .../recursive_root_inout/InputInOut02.dat | 3 + .../recursive_root_inout/InputInOut03.dat | 3 + .../recursive_root_inout/InputInOut04.dat | 3 + .../recursive_root_inout/InputInOut05.dat | 3 + .../InputInOut06_skip_me.txt | 6 + .../InputInOut01.dat | 3 + .../InputInOut02.dat | 3 + .../InputInOut03.dat | 3 + .../InputInOut04.dat | 3 + .../InputInOut05.dat | 3 + .../InputInOut01.dat | 3 + .../InputInOut02.dat | 3 + .../InputInOut03.dat | 3 + .../InputInOut04.dat | 3 + .../InputInOut05.dat | 3 + .../InputInOut01.dat | 3 + .../InputInOut02.dat | 3 + .../InputInOut03.dat | 3 + .../InputInOut04.dat | 3 + .../InputInOut05.dat | 3 + .../test_recursive_sub_022/InputInOut01.dat | 3 + .../test_recursive_sub_022/InputInOut02.dat | 3 + .../test_recursive_sub_022/InputInOut03.dat | 3 + .../test_recursive_sub_022/InputInOut04.dat | 3 + .../test_recursive_sub_022/InputInOut05.dat | 3 + .../test_recursive_sub_01/InputInOut01.dat | 3 + .../test_recursive_sub_01/InputInOut02.dat | 3 + .../test_recursive_sub_01/InputInOut03.dat | 3 + .../test_recursive_sub_01/InputInOut04.dat | 3 + .../test_recursive_sub_01/InputInOut05.dat | 3 + .../InputInOut01.dat | 3 + .../InputInOut02.dat | 3 + .../InputInOut03.dat | 3 + .../InputInOut04.dat | 3 + .../InputInOut05.dat | 3 + .../test_recursive_sub_011/InputInOut01.dat | 3 + .../test_recursive_sub_011/InputInOut02.dat | 3 + .../test_recursive_sub_011/InputInOut03.dat | 3 + .../test_recursive_sub_011/InputInOut04.dat | 3 + .../test_recursive_sub_011/InputInOut05.dat | 3 + .../InputInOut06_skip_me.txt | 6 + .../test_recursive_sub_012/InputInOut01.dat | 3 + .../test_recursive_sub_012/InputInOut02.dat | 3 + .../test_recursive_sub_012/InputInOut03.dat | 3 + .../test_recursive_sub_012/InputInOut04.dat | 3 + .../test_recursive_sub_012/InputInOut05.dat | 3 + .../InputInOut06_skip_me.txt | 6 + .../test_recursive_sub_02/InputInOut01.dat | 3 + .../test_recursive_sub_02/InputInOut02.dat | 3 + .../test_recursive_sub_02/InputInOut03.dat | 3 + .../test_recursive_sub_02/InputInOut04.dat | 3 + .../test_recursive_sub_02/InputInOut05.dat | 3 + .../InputInOut06_skip_me.txt | 6 + .../test/com/sun/jbi/filebc/output/sample.txt | 3 + .../EndpointConfigurationFactoryTest.java | 72 + ...EndpointConfigurationSUDescriptorTest.java | 97 + .../packaging/EndpointDataImplTest.java | 117 ++ .../packaging/WSDLConfigurationsTest.java | 234 +++ .../packaging/descriptors/META-INF/jbi.xml | 10 + .../wsdls/FileInTest/FileInTest.bpel | 111 ++ .../wsdls/FileInTest/TestFileIn.wsdl | 77 + .../jbi/filebc/packaging/wsdls/TestFile.wsdl | 73 + .../filebc/packaging/wsdls/TestTrigger.wsdl | 61 + .../filebc/testDir/componentConfiguration.xml | 14 + .../filebc/testDir/componentConfiguration.xsd | 36 + .../sun/jbi/filebc/testDir/config.properties | 3 + .../filebc/util/FileStreamHandlerTest.java | 680 +++++++ .../filebc/util/InputFilenameFilterTest.java | 204 +++ .../util/OutputFilenameFormatterTest.java | 121 ++ .../jbi/filebc/util/WSDLUtilitiesTest.java | 76 + .../com/sun/jbi/filebc/util/XmlUtilTest.java | 230 +++ .../util/testInput/FixedLengthRecords.dat | 1 + .../filebc/util/testInput/MultipleRecords.dat | 6 + .../util/testInput/MultipleRecords2.dat | 2 + .../util/testInput/MultipleRecords3.dat | 1 + .../util/testInput/MultipleRecords4.dat | 1 + .../util/testInput/MultipleRecords5.dat | 1 + .../util/testInput/MultipleRecords6.dat | 1 + .../util/testInput/MultipleRecords7.dat | 1 + .../filebc/util/testInput/SingleRecord.dat | 1 + .../jbi/filebc/util/testInput/TestGetText.xml | 11 + .../test/framework/Configuration.java | 89 + .../test/framework/IntegrationTestCase.java | 55 + .../test/framework/OpenESBInstaller.java | 106 ++ .../test/framework/SAAssembler.java | 216 +++ .../test/framework/SUAssembler.java | 17 + .../test/framework/config.properties | 9 + .../framework/impl/FileBCSUAssembler.java | 83 + .../jbi/integration/testbc/core/Command.java | 14 + .../integration/testbc/core/Connection.java | 69 + .../testbc/core/ConnectionListener.java | 105 ++ .../testbc/core/GetClassCommand.java | 42 + .../jbi/integration/testbc/core/Proxy.java | 256 +++ .../jbi/integration/testbc/core/Sandbox.java | 9 + .../testbc/core/SandboxClassLoader.java | 70 + .../integration/testbc/core/SandboxImpl.java | 50 + .../jbi/integration/testbc/core/Util.java | 61 + .../integration/testbc/impl/JbiHelper.java | 223 +++ .../testbc/impl/MessageConsumer.java | 12 + .../testbc/impl/MessageProcessor.java | 130 ++ .../testbc/impl/TestSEBootstrap.java | 33 + .../testbc/impl/TestSEComponent.java | 80 + .../testbc/impl/TestSEComponentLifeCycle.java | 52 + .../test/jbi/integration/testbc/impl/jbi.xml | 29 + .../testbc/installer/TestHelper.java | 123 ++ .../testbc/installer/TestSEInstaller.java | 56 + .../jbi/integration/testcases/Helper.java | 111 ++ .../filebcprotocol/TestFileProtocol.java | 284 +++ .../testcases/filebcprotocol/jbi.xml | 9 + .../outProtect-No-ProtectDir.wsdl | 42 + .../outProtect-With-ProtectDir.wsdl | 42 + .../testcases/nmprops/TestNMProperties.java | 309 ++++ .../integration/testcases/nmprops/in-out.wsdl | 42 + .../jbi/integration/testcases/nmprops/jbi.xml | 9 + .../testcases/recovery/TestRecovery.java | 191 ++ .../integration/testcases/recovery/file.wsdl | 42 + .../integration/testcases/recovery/jbi.xml | 9 + .../testcases/throttling/TestThrottling.java | 343 ++++ .../testcases/throttling/file1.wsdl | 38 + .../testcases/throttling/file2.wsdl | 38 + .../integration/testcases/throttling/jbi.xml | 9 + .../archetype-resources/nbactions.xml | 75 + .../packaging/nbactions.xml | 75 + .../archetype-resources/packaging/pom.xml | 166 ++ .../packaging/src/componentConfiguration.xml | 17 + .../packaging/src/componentConfiguration.xsd | 38 + .../archetype-resources/packaging/src/jbi.xml | 45 + .../resources/archetype-resources/pom.xml | 49 + .../resources/archetype-resources/smvn.bat | 6 + .../projects/basic/archetype.properties | 6 + .../test/resources/projects/basic/goal.txt | 0 .../pom.xml | 43 + .../META-INF/maven/archetype-metadata.xml | 62 + .../resources/archetype-resources/build.xml | 8 + ...pi.project.support.ant.AntBasedProjectType | 1 + ...spi.queries.CollocationQueryImplementation | 1 + .../classes/sedeployplugin/Bundle.properties | 15 + .../build/classes/sedeployplugin/layer.xml | 29 + .../sedeployplugin/project/Bundle.properties | 4 + .../project/SEPluginProject$1.class | Bin 0 -> 1684 bytes .../project/SEPluginProject$2.class | Bin 0 -> 2297 bytes .../project/SEPluginProject$3.class | Bin 0 -> 952 bytes ...luginProject$AntArtifactProviderImpl.class | Bin 0 -> 2057 bytes .../project/SEPluginProject$Info.class | Bin 0 -> 1701 bytes ...luginProject$ProjectOpenedHookImpl$1.class | Bin 0 -> 2497 bytes ...EPluginProject$ProjectOpenedHookImpl.class | Bin 0 -> 2636 bytes ...luginProject$ProjectXmlSavedHookImpl.class | Bin 0 -> 1247 bytes ...uginProject$RecommendedTemplatesImpl.class | Bin 0 -> 1387 bytes .../project/SEPluginProject.class | Bin 0 -> 9282 bytes .../SEPluginProjectActionProvider$1.class | Bin 0 -> 2562 bytes .../SEPluginProjectActionProvider.class | Bin 0 -> 3557 bytes .../project/SEPluginProjectGenerator.class | Bin 0 -> 7012 bytes .../SEPluginProjectLogicalViewProvider.class | Bin 0 -> 3821 bytes .../project/SEPluginProjectOperations.class | Bin 0 -> 5072 bytes .../project/SEPluginProjectProperties.class | Bin 0 -> 5698 bytes .../project/SEPluginProjectType.class | Bin 0 -> 1666 bytes .../project/customizer/Bundle.properties | 19 + .../customizer/CustomizerGeneral.class | Bin 0 -> 5177 bytes .../customizer/CustomizerPackage.class | Bin 0 -> 3845 bytes .../SEPluginProjectCustomizerModel$1.class | Bin 0 -> 1406 bytes .../SEPluginProjectCustomizerModel.class | Bin 0 -> 4804 bytes ...ectCustomizerProvider$OptionListener.class | Bin 0 -> 1969 bytes ...jectCustomizerProvider$PanelProvider.class | Bin 0 -> 1750 bytes ...stomizerProvider$SubCategoryProvider.class | Bin 0 -> 377 bytes .../SEPluginProjectCustomizerProvider.class | Bin 0 -> 7291 bytes .../project/node/Bundle.properties | 16 + ...EPluginProjectNode$BrokenLinksAction.class | Bin 0 -> 2436 bytes ...jectNode$SEPluginProjectNodeChildren.class | Bin 0 -> 6016 bytes .../project/node/SEPluginProjectNode.class | Bin 0 -> 8110 bytes .../project/resources/build-impl.xsl | 208 +++ .../project/resources/build.xsl | 120 ++ .../project/resources/projectIcon.png | Bin 0 -> 450 bytes .../project/resources/se-jbi-module.xml | 3 + .../project/wizard/Bundle.properties | 9 + .../wizard/SEPluginProjectDescription.html | 8 + .../SEPluginProjectWizardIterator.class | Bin 0 -> 8758 bytes .../wizard/SEPluginProjectWizardPanel.class | Bin 0 -> 3506 bytes .../SEPluginProjectWizardPanelVisual$1.class | Bin 0 -> 1032 bytes .../SEPluginProjectWizardPanelVisual.class | Bin 0 -> 9025 bytes .../project/wizard/resources/SampleWSDL.wsdl | 42 + .../project/wizard/resources/jbi.xml | 14 + .../archetype-resources/build/no-license.txt | 1 + .../resources/archetype-resources/manifest.mf | 6 + .../nbproject/build-impl.xml | 45 + .../nbproject/genfiles.properties | 8 + .../nbproject/platform.properties | 27 + .../nbproject/project.properties | 2 + .../archetype-resources/nbproject/project.xml | 148 ++ .../nbproject/suite.properties | 1 + .../resources/archetype-resources/pom.xml | 101 ++ ...pi.project.support.ant.AntBasedProjectType | 1 + ...spi.queries.CollocationQueryImplementation | 1 + .../__artifactId__/Bundle.properties | 15 + .../component/__artifactId__/layer.xml | 29 + .../__artifactId__/project/Bundle.properties | 4 + .../project/SEPluginProject.java | 408 +++++ .../SEPluginProjectActionProvider.java | 136 ++ .../project/SEPluginProjectGenerator.java | 182 ++ .../SEPluginProjectLogicalViewProvider.java | 81 + .../project/SEPluginProjectOperations.java | 114 ++ .../project/SEPluginProjectProperties.java | 149 ++ .../project/SEPluginProjectType.java | 55 + .../project/customizer/Bundle.properties | 19 + .../project/customizer/CustomizerGeneral.form | 128 ++ .../project/customizer/CustomizerGeneral.java | 178 ++ .../project/customizer/CustomizerPackage.form | 117 ++ .../project/customizer/CustomizerPackage.java | 114 ++ .../SEPluginProjectCustomizerModel.java | 125 ++ .../SEPluginProjectCustomizerProvider.java | 230 +++ .../project/node/Bundle.properties | 16 + .../project/node/SEPluginProjectNode.java | 350 ++++ .../project/resources/build-impl.xsl | 208 +++ .../project/resources/build.xsl | 120 ++ .../project/resources/projectIcon.png | Bin 0 -> 450 bytes .../project/resources/se-jbi-module.xml | 3 + .../project/wizard/Bundle.properties | 9 + .../wizard/SEPluginProjectDescription.html | 8 + .../wizard/SEPluginProjectWizardIterator.java | 238 +++ .../wizard/SEPluginProjectWizardPanel.java | 93 + .../SEPluginProjectWizardPanelVisual.form | 120 ++ .../SEPluginProjectWizardPanelVisual.java | 259 +++ .../project/wizard/resources/Greetings.wsdl | 89 + .../project/wizard/resources/goodbye.xsl | 31 + .../project/wizard/resources/hello.xsl | 29 + .../project/wizard/resources/jbi.xml | 14 + .../wizard/resources/xsltmap.properties | 28 + .../projects/basic/archetype.properties | 5 + .../test/resources/projects/basic/goal.txt | 0 .../maven-archetype-service-engine-v2/pom.xml | 58 + .../META-INF/maven/archetype-metadata.xml | 80 + .../jbiadapter/nbactions.xml | 51 + .../archetype-resources/jbiadapter/pom.xml | 78 + .../ProviderSEComponentLifeCycle.java | 52 + .../__componentName__/ProviderSEEndpoint.java | 101 ++ .../ProviderSEInstaller.java | 34 + .../ProviderSEMessageExchangeHandler.java | 171 ++ .../__componentName__/ProviderSERuntime.java | 56 + .../ProviderSESUManager.java | 49 + .../ProviderSEServiceUnit.java | 63 + .../__componentName__/XSLTFileLocator.java | 210 +++ .../__componentName__/XSLTService.java | 108 ++ .../AbstractMessageExchangeHandler.java | 141 ++ .../common/BasicComponentLifeCycle.java | 398 +++++ .../common/ComponentInstaller.java | 275 +++ .../common/ComponentRuntime.java | 174 ++ .../DefaultMessageExchangeReceiver.java | 180 ++ .../common/MessageExchangeHandler.java | 31 + .../common/MessageExchangeListener.java | 36 + .../common/MessageExchangeReceiver.java | 47 + .../common/MessageExchangeSupport.java | 170 ++ .../common/RuntimeContext.java | 176 ++ .../common/RuntimeHelper.java | 360 ++++ .../AbstractServiceUnitManager.java | 312 ++++ .../common/deployment/ConsumerEndpoint.java | 208 +++ .../common/deployment/Endpoint.java | 289 +++ .../common/deployment/ProviderEndpoint.java | 107 ++ .../common/deployment/SUDescriptor.java | 364 ++++ .../common/deployment/ServiceUnit.java | 464 +++++ .../wsdl/AbstractExtensibilityElement.java | 44 + .../wsdl/AbstractExtensionRegistry.java | 45 + .../wsdl/AbstractExtensionSerializer.java | 123 ++ .../common/wsdl/AbstractNormalizer.java | 229 +++ .../common/wsdl/SEBindingExt.java | 99 ++ .../common/wsdl/WSDL11JBIWrapper.java | 471 +++++ .../common/wsdl/WSDLProcessor.java | 419 +++++ .../archetype-resources/nbactions.xml | 75 + .../packaging/nbactions.xml | 51 + .../archetype-resources/packaging/pom.xml | 185 ++ .../archetype-resources/packaging/src/jbi.xml | 45 + .../packaging/src/newse-config.properties | 6 + .../resources/archetype-resources/pom.xml | 59 + .../resources/archetype-resources/smvn.bat | 6 + .../projects/basic/archetype.properties | 6 + .../test/resources/projects/basic/goal.txt | 0 457 files changed, 33495 insertions(+) create mode 100644 maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt create mode 100644 maven-ojc-archeType-v2/Developing_Component_From_Archtype_Guide.txt~ create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/build.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/manifest.mf create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/private/platform-private.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/nbproject/suite.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/pom.xml create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/BindingComponentWsdlExt.xsd create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/BindingExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtAttribute.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtComponent.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtConstants.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtElementFactoryProvider.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/ExtVisitor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/FaultExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/InputExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OperationExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/OutputExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/model/PortExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/binding-ext.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/fault-ext.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/input-ext.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/operation-ext.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/output-ext.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/resources/port-ext.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/WSDLExtTemplateProvider.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/template/template.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidator.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/validator/WSDLExtValidatorSchemaFactory.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/archetype.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-plugin-v2/src/test/resources/projects/basic/goal.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/META-INF/maven/archetype-metadata.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingComponentLifeCycle.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingConsumerProxy.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingInstaller.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingNormalizer.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingProviderProxy.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingRuntime.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingSUManager.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingServiceUnit.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXBindingWSDLProcessor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/JMXEndpointMBean.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/AbstractMessageExchangeHandler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/BasicComponentLifeCycle.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentInstaller.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentRuntime.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/DefaultMessageExchangeReceiver.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeHandler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeListener.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeReceiver.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeSupport.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeContext.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeHelper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/AbstractServiceUnitManager.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ConsumerEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ProviderEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensibilityElement.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionSerializer.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractNormalizer.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDL11JBIWrapper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/BindingExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/ExtConstants.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/FaultExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/InputExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OperationExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/OutputExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/PortExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtHelper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtension.xsd create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/wsdlext/WSDLExtensionRegistry.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/EndpointImplTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FaultExceptionTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingDeployerTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileBindingLifeCycleTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileDenormalizerTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/FileNormalizerTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundMessageProcessorTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/InboundReceiverTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ListenerMetaTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/OutboundMessageProcessorTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ReceiverTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/ServiceUnitImplTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/FileBindingBootstrapTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/bootstrap/InstallerExtTest.java create mode 100644 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 create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileAddressTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileBindingTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileExtSerializerTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileInputTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOperationTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/FileOutputTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileAddressElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileBindingElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileMessageElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/expected/FileOperationElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileAddressElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileBindingElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileMessageElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/extensions/output/TestFileOperationElement.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/BadInput.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOnly.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/InputInOut.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/input/filebc.lck create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/output/sample.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationFactoryTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointConfigurationSUDescriptorTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/EndpointDataImplTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/WSDLConfigurationsTest.java create mode 100644 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 create mode 100644 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 create mode 100644 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 create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestFile.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/packaging/wsdls/TestTrigger.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/componentConfiguration.xsd create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/testDir/config.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/FileStreamHandlerTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/InputFilenameFilterTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/OutputFilenameFormatterTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/WSDLUtilitiesTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/XmlUtilTest.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/FixedLengthRecords.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords2.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords3.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords4.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords5.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords6.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/MultipleRecords7.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/SingleRecord.dat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/com/sun/jbi/filebc/util/testInput/TestGetText.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/Configuration.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/IntegrationTestCase.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/OpenESBInstaller.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SAAssembler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SUAssembler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/config.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/impl/FileBCSUAssembler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Command.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Connection.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/ConnectionListener.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/GetClassCommand.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Proxy.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Sandbox.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxClassLoader.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxImpl.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Util.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/JbiHelper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageConsumer.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageProcessor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEBootstrap.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponent.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponentLifeCycle.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestHelper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestSEInstaller.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/Helper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/TestFileProtocol.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-No-ProtectDir.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-With-ProtectDir.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/TestNMProperties.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/in-out.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/TestRecovery.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/file.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/TestThrottling.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file1.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file2.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/nbactions.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/nbactions.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xsd create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/smvn.bat create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/archetype.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/goal.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/layer.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$1.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$2.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$3.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$AntArtifactProviderImpl.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$Info.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectOpenedHookImpl$1.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectOpenedHookImpl.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectXmlSavedHookImpl.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$RecommendedTemplatesImpl.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectActionProvider$1.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectActionProvider.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectGenerator.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectLogicalViewProvider.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectOperations.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectProperties.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectType.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/CustomizerGeneral.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/CustomizerPackage.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerModel$1.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerModel.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$OptionListener.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$PanelProvider.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$SubCategoryProvider.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode$BrokenLinksAction.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode$SEPluginProjectNodeChildren.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build-impl.xsl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build.xsl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/projectIcon.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/se-jbi-module.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectDescription.html create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardIterator.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanel.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanelVisual$1.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanelVisual.class create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/SampleWSDL.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/no-license.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/manifest.mf create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/suite.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProject.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectActionProvider.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectGenerator.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectLogicalViewProvider.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectOperations.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectProperties.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectType.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.form create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.form create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerModel.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerProvider.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/SEPluginProjectNode.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build-impl.xsl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build.xsl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/projectIcon.png create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/se-jbi-module.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/Bundle.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectDescription.html create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardIterator.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanel.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.form create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/Greetings.wsdl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/goodbye.xsl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/hello.xsl create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/xsltmap.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/test/resources/projects/basic/archetype.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/test/resources/projects/basic/goal.txt create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/META-INF/maven/archetype-metadata.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEComponentLifeCycle.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEInstaller.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEMessageExchangeHandler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSERuntime.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSESUManager.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEServiceUnit.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTFileLocator.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTService.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/AbstractMessageExchangeHandler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/BasicComponentLifeCycle.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentInstaller.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentRuntime.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/DefaultMessageExchangeReceiver.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeHandler.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeListener.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeReceiver.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeSupport.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeContext.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeHelper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/AbstractServiceUnitManager.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ConsumerEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ProviderEndpoint.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensibilityElement.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionSerializer.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractNormalizer.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDL11JBIWrapper.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/nbactions.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/nbactions.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/newse-config.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/pom.xml create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/smvn.bat create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/archetype.properties create mode 100644 maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/goal.txt 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 0000000000000000000000000000000000000000..c378d12761cf66beb7e4e0c54d52104165b498f4 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIM279_VhE&{2`t$$4J+o27Eg256 zif?}`onLMd?%`o!a9}WO;AwcM>dW}QzHS%uvGwbHe(*n1KAn7+f$>Po*$e*t+YAoG zIC3zs2q>QrD{=g;z~1&Vc>3awvwwnnt}-+*BrysuWVMyh^ElJj^7;PV8Rra&)tL`3 zyce+J#;)S`5^6ekPcsNOBrvN@b8lvyXxi9t)J4-^?^#*Jvgfj^xEYu_SS`2g-mLTQ zFb`v9+s%yd9%~-3;Ho7ms(~tr+s>}$JDOz;vR_!|USfm)Irek=zC4hXP~W|Fu#UDVqk^Rf5{8d)e92?PCwYXS#mWa17nL2x4~Hh1|t?BZVvH<%s|J!Ic0L( zgMC2*i|gHEdzn}+GdeIVRPmmWxIl&Hkool$|Jgrss-^bP0l+XkK2ePFK literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..49343303188380f51d3ea85d8ba613caaf370bee GIT binary patch literal 1035 zcmeAS@N?(olHy`uVBq!ia0vp^+(697!OXzGxO0b^A&|pa;1O926c+|!Ax6o@wUG=A z%nSiOA+A}Bj3q2Awe0LooSa?U+*5dYXY%teXJgyW!m@>nYd=5#P78}8?Ce)~crIva zUNbVfYis*JNa%}!!EbBp8{XbeJUrg{_K1kF)nrp+S$G8Zs86opVS-v_kMr67atK@r0phrwj)mK>flFzskoK&=l_3uW>p4-h8YqX zEDVe;8yTTQOJYOW=5zG|$CgRVmT_P(Y+w>>+d6B@|NRVyc3yw>kA36Crw)%4DpM>Q z7?iw>?VK5yIP?l19rfHZ>mo1XO7@M6OdN7-pY_isTYP;Y()In%pFjVUFB>ofu?O)p zF)$wC@b*}6VB^*ejGOuATO2Cb`i)C@n}bU@vw%Z^c!Pz4qX2`Z6Mt@u7z2xda#c`U z=8>mNB|xi^mYC=Rg^p?pDl}-A0i6vZ4lvxUKQ-~zf~Sjs9%Jxy^>bP0l+XkK>~LyM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5c63b31f7cf698cac54ff76cebaee78c21183251 GIT binary patch literal 465 zcmV;?0WSWDP)O? zBux0i$bbd_0tlzAzkj^>|LOTbFn)b&(f^0X3$eNcAb>Dju%LhkMZhO}I>WcO=Na~` zn1$5^00D$I3_v#GvKfW}0tmwe*j$6vW+(s%Ah-d^txLg-w=bW7`5PvcqiDh<4-i0L zXC$>O`G4~2ga2Q@|NQ^-^@sl(4_*52pW6XZP0Ad75c4qrC{QmQoA+u=)*wD)K zaE5oEzA?;PzL`N-T!sOkJU{@kfCOH={lri+aWULk0ePMOGopOq&c`PY5I{^I;>qg| z4EO*(d4K={yWrRFzYO{DfnbwCd=UHdx1VrD_~Zcs2pkL1wR8UKs>(4KsL6l@FWh>< zaN^8)xRde80|XFCG_td?Fg$zw0B1B}lLrVOya|aI01#jR@{g4o@lFzskoK&=l_3uW>p4-h8YqX zEDVe;8yTTQOJYOW=5zG|$CgRVmT_P(Y+w>>+d6B@|NRVyc3yw>kA36Crw)%4DpM>Q z7?iw>?VK5yIP?l19rfHZ>mo1XO7@M6OdN7-pY_isTYP;Y()In%pFjVUFB>ofu?O)p zF)$wC@b*}6VB^*ejGOuATO2Cb`i)C@n}bU@vw%Z^c!Pz4qX2`Z6Mt@u7z2xda#c`U z=8>mNB|xi^mYC=Rg^p?pDl}-A0i6vZ4lvxUKQ-~zf~Sjs9%Jxy^>bP0l+XkK>~LyM literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a6b7f8415baf7f5237c1de5ca3867decaf700c1b GIT binary patch literal 393 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmUzPnffIy#(?lOI#yL zg7ec#$`gxH85~pclTsBta}(23gHjVyDhp4h+AuIMN_)CEhE&{2`t$$4{o$Y6dj9jM zGzl+1XOxm>ah5~CLC1hmH`&?X@B6#PYoz|!?d{8An8L=Pu!GS@=oC-!EA7rrw%6PQ z&jE#67?ZdXq@L*1%v#PqV^M{;Lc@%Ne>0~_b}ssG$!O<)ZmtTBHeLsYjSn`PCLR)J zo1o|*wR|-LQwQr!w~~|g_VUoU!w{i40SeM&)>$Kgz% zR3i@q=Rf=MSF(q92HR*%vb%X%a^GIt^BeMy>afM=F>okMVEn)EpKBn)ril~M1b}?8 zFDo4R0-R + + + + + 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 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 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 connections = new ArrayList(); + + public SAAssembler(String name, String desc) { + this.name = name.replace(' ', '_'); + this.description = desc; + + } + + public void addSUAssembler(SUAssembler su) { + mSus.add(su); + } + + public boolean removeSUAssembler(SUAssembler su) { + return mSus.remove(su); + } + + public String assemble(String workingDir) throws IOException { + String base = workingDir + File.separator + name; + //Create base directory + File baseDir = new File(base); + if (baseDir.exists()) { + TestHelper.deleteDirectory(baseDir); + } + baseDir.mkdirs(); + + String meta = base + File.separator + "META-INF"; + File metaDir = new File(meta); + metaDir.mkdir(); + + StringBuffer buf = new StringBuffer(); + buf.append(XML); + buf.append(BEGIN_JBI); + buf.append(BEGIN_SA); + + buf.append(BEGIN_ID); + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append(NAME_BEGIN); + buf.append(name); + buf.append(NAME_END); + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append(DESCRIPTION_BEGIN); + buf.append(description); + buf.append(DESCRIPTION_END); + + buf.append(END_ID); + for (Iterator iter = mSus.iterator(); iter.hasNext();) { + SUAssembler su = iter.next(); + buf.append(SERVICE_UNIT_BEGIN); + + buf.append("${symbol_escape}t"); + buf.append(BEGIN_ID); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append(NAME_BEGIN); + buf.append(su.getName()); + buf.append(NAME_END); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append(DESCRIPTION_BEGIN); + buf.append(su.getDescription()); + buf.append(DESCRIPTION_END); + + buf.append("${symbol_escape}t"); + buf.append(END_ID); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append("${symbol_escape}n"); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append(""); + buf.append(su.assemble(workingDir, base)); + buf.append("${symbol_escape}n"); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append(""); + buf.append(su.getComponentName()); + buf.append("${symbol_escape}n"); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t"); + buf.append("${symbol_escape}n"); + + buf.append(SERVICE_UNIT_END); + + } + + //add all the connections + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + for (Iterator iter = connections.iterator(); iter.hasNext();) { + Object[] objs = iter.next(); + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + + if (objs[4] != null) { + Redelivery redelivery = (Redelivery) objs[4]; + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + if (redelivery.action == OnFailure.redirect) { + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + } else { + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t<").append(redelivery.action).append("/>${symbol_escape}n"); + } + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + } + if (objs[5] != null) { + buf.append(""); + } + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + } + + buf.append("${symbol_escape}t${symbol_escape}t${symbol_escape}n"); + + + buf.append(END_SA); + buf.append(END_JBI); + + FileOutputStream out = new FileOutputStream(meta + File.separator + "jbi.xml"); + out.write(buf.toString().getBytes()); + out.close(); + String destJar = base + File.separator + name + ".jar"; + TestHelper.jarAllFiles(base, destJar); + return destJar; + } + + public void addConnection(QName consumerServiceName, String consumerEndpointName, QName providerServiceName, String providerEndpointName) { + addConnection(consumerServiceName, consumerEndpointName, providerServiceName, providerEndpointName, null, null); + } + + public void addConnection(QName consumerServiceName, String consumerEndpointName, QName providerServiceName, String providerEndpointName, Redelivery redelivery) { + addConnection(consumerServiceName, consumerEndpointName, providerServiceName, providerEndpointName, redelivery, null); + } + + public void addConnection(QName consumerServiceName, String consumerEndpointName, QName providerServiceName, String providerEndpointName, Redelivery redelivery, Throttling throttling) { + connections.add(new Object[]{consumerServiceName, consumerEndpointName, providerServiceName, providerEndpointName, redelivery, throttling}); + } + + static public class Redelivery { + + public static enum OnFailure { + + redirect, error, suspend, delete + }; + private int maxAttempts; + private long waitTime; + private OnFailure action; + private String redirectEndpointName; + private String redirectOperationName; + private QName redirectServiceName; + + public Redelivery(int maxAttempts, long waitTime, OnFailure action) { + this.waitTime = waitTime; + this.maxAttempts = maxAttempts; + this.action = action; + } + + public void setRedirectEndPoint(String endPointName, String operationName, QName serviceName) { + this.redirectEndpointName = endPointName; + this.redirectOperationName = operationName; + this.redirectServiceName = serviceName; + } + } + + static public class Throttling { + + private int maximumConcurrencyLimit; + + public Throttling(int maxCC) { + this.maximumConcurrencyLimit = maxCC; + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SUAssembler.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SUAssembler.java new file mode 100644 index 000000000..2032f684d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/SUAssembler.java @@ -0,0 +1,17 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.test.framework; + +import java.io.IOException; + +public interface SUAssembler { + + String getName(); + + String getDescription(); + + String assemble(String workingDir, String base) throws IOException; + + String getComponentName(); +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/config.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/config.properties new file mode 100644 index 000000000..9d5fc5f99 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/config.properties @@ -0,0 +1,9 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +JbiHost=localhost +JbiPort=8686 +JbiUsername=admin +JbiPassword=adminadmin +JbiTarget=server +JMXServiceURL=service:jmx:rmi:///jndi/rmi://:8686/jmxrmi \ 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/impl/FileBCSUAssembler.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/impl/FileBCSUAssembler.java new file mode 100644 index 000000000..c36ceb86b --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/test/framework/impl/FileBCSUAssembler.java @@ -0,0 +1,83 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.test.framework.impl; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import test.jbi.integration.test.framework.SUAssembler; +import test.jbi.integration.testbc.installer.TestHelper; + +public class FileBCSUAssembler implements SUAssembler { + + private String name; + private String desc; + private List wsdls; + private String jbiFile; + private static final String XML = "${symbol_escape}n"; + + public FileBCSUAssembler(String name, String desc) { + this.name = name.replace(' ', '_'); + this.desc = desc; + wsdls = new ArrayList(); + } + + public void addWsdl(String wsdl) { + wsdls.add(wsdl); + } + + public boolean removeWsdl(String wsdl) { + return wsdls.remove(wsdl); + } + + public String getJbiFile() { + return jbiFile; + } + + public void setJbiFile(String jbiFile) { + this.jbiFile = jbiFile; + } + + public String assemble(String workingDir, String destDir) throws IOException { + String base = workingDir + File.separator + name; + //Create base directory + File baseDir = new File(base); + if (baseDir.exists()) { + TestHelper.deleteDirectory(baseDir); + } + baseDir.mkdirs(); + + String meta = base + File.separator + "META-INF"; + File metaDir = new File(meta); + metaDir.mkdir(); + + //Copy all WSDL files to meta-inf folder + for (Iterator iter = wsdls.iterator(); iter.hasNext();) { + TestHelper.copyFile(meta, iter.next()); + } + + //copy jbi.xml into META-INF + TestHelper.copyFile(meta, getJbiFile(), "jbi.xml"); + + String jarFileName = name + ".jar"; + String destJar = destDir + File.separator + jarFileName; + TestHelper.jarAllFiles(base, destJar); + return jarFileName; + } + + public String getComponentName() { + return "sun-file-binding"; + } + + public String getDescription() { + return desc; + } + + public String getName() { + return name; + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Command.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Command.java new file mode 100644 index 000000000..d0b9b18ff --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Command.java @@ -0,0 +1,14 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.Serializable; + +import javax.jbi.component.ComponentContext; + + +public interface Command extends Serializable{ + + Serializable execute(ComponentContext context) throws Exception; +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Connection.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Connection.java new file mode 100644 index 000000000..1e42da246 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Connection.java @@ -0,0 +1,69 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.IOException; +import java.net.Socket; +import java.util.logging.Level; +import java.util.logging.Logger; + + +public class Connection { + + private static final Logger mLog = Logger.getLogger(Connection.class.getName()); + + private int serverPort; + private Proxy proxy; + private Sandbox sandbox; + private Socket s; + private String hostname; + private boolean isClosed; + + public Connection(String hostname, int port){ + this.serverPort = port; + this.hostname = hostname; + isClosed = false; + } + + public void start() throws IOException{ + s = new Socket(hostname, serverPort); + sandbox = new SandboxImpl(); + proxy = new Proxy(s, sandbox, null); + proxy.addCloseEventListener(new Proxy.CloseEventListener() { + public void socketClosed(Socket s) { + isClosed = true; + try{ + s.close(); + }catch(Throwable t){} + } + }); + proxy.start(); + } + + public Object execute(Command cmd) throws Throwable{ + byte[] data = Util.serializeObject(cmd); + byte[] reply = proxy.sendRequestReply(data); + Object obj = Util.deserializeObject(reply); + if(obj instanceof Throwable) + throw (Throwable)obj; + return obj; + } + + public boolean isClosed(){ + return isClosed; + } + + public void close(){ + if(isClosed) + return; + + try{ + proxy.sendClose(); + }catch(Throwable t){ + mLog.log(Level.WARNING, "Could not close connection properly.", t); + } + } + + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/ConnectionListener.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/ConnectionListener.java new file mode 100644 index 000000000..bf66f7cfc --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/ConnectionListener.java @@ -0,0 +1,105 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.Iterator; +import java.util.List; +import java.util.Vector; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + + +public class ConnectionListener { + + private static final Logger mLog = Logger.getLogger(ConnectionListener.class.getName()); + + private int listenerPort; + private ServerSocket ss; + private ThreadPoolExecutor pool; + private Object mHandlerObject; + private List clientSockets = new Vector(); + + public ConnectionListener(int port, Object handler) throws IOException{ + this.listenerPort = port; + this.mHandlerObject = handler; + pool = new ThreadPoolExecutor(10, 10, 10, TimeUnit.SECONDS, new LinkedBlockingQueue()); + ss = new ServerSocket(this.listenerPort); + } + + public void start(){ + new Thread(new ListenerThread()).start(); + } + + public void close(){ + try { + ss.close(); + } catch (Throwable e) {} + //also close any open sockets + for(Iterator iter=clientSockets.iterator(); iter.hasNext();){ + try{ + iter.next().close(); + }catch(Throwable t){} + } + pool.shutdown(); + } + + public class ListenerThread implements Runnable{ + public void run(){ + for(;;){ + Socket s = null; + try { + s = ss.accept(); + } catch (IOException e) { + if(ss.isClosed()){ + mLog.log(Level.INFO, "Listener is closed at port " + listenerPort); + break; + } + mLog.log(Level.SEVERE, "Error accepting at port " + listenerPort, e); + } + + if(s == null) + continue; + + final Socket cs = s; + clientSockets.add(cs); + pool.execute(new Runnable() { + public void run() { + //Create new Customclassloader + SandboxClassLoader clsLoader = new SandboxClassLoader(); + Sandbox sandbox = null; + try { + sandbox = (Sandbox) (clsLoader + .loadClass(SandboxClassLoader.EXECUTOR_CLASS) + .newInstance()); + } catch (Exception e) { + mLog.log(Level.SEVERE, "Could not instanciate sandbox " + cs.getPort()); + } + try { + final Proxy proxy = new Proxy(cs, sandbox, mHandlerObject); + proxy.addCloseEventListener(new Proxy.CloseEventListener() { + public void socketClosed(Socket s) { + clientSockets.remove(s); + } + }); + clsLoader.setProxy(proxy); + proxy.start(); + } catch (IOException e) { + mLog.log(Level.SEVERE, "Could not open connection at port " + cs.getPort(), e); + return; + } + + } + }); + + } + } + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/GetClassCommand.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/GetClassCommand.java new file mode 100644 index 000000000..aa73062eb --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/GetClassCommand.java @@ -0,0 +1,42 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.IOException; +import java.io.InputStream; +import java.io.Serializable; + +import javax.jbi.component.ComponentContext; + +public class GetClassCommand implements Command { + + private static final ClassLoader CLASSLOADER = GetClassCommand.class + .getClassLoader(); + private String className; + + public Serializable execute(ComponentContext context) throws Exception{ + InputStream in = null; + Serializable result = null; + try{ + in = CLASSLOADER.getResourceAsStream(className.replace('.', '/') + ".class"); + result = Util.readBytes(in); + } catch (IOException e) { + result = e; + }finally{ + Util.closeStream(in); + } + + return result; + } + + public String getClassName() { + return className; + } + + public void setClassName(String className) { + this.className = className; + } + + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Proxy.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Proxy.java new file mode 100644 index 000000000..3a8a2a5cd --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Proxy.java @@ -0,0 +1,256 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class Proxy { + + private static final Logger mLog = Logger.getLogger(Proxy.class.getName()); + + private Socket s; + private DataOutputStream out; + private DataInputStream in; + private Hashtable conversations = new Hashtable(); + private ThreadPoolExecutor pool; + private static final byte RUN_COMMAND = 11; + private static final byte GOT_REPLY = 22; + private static final byte CLOSE = 33; + private Sandbox sandbox; + private int conversationCounter = 1; + private List closeEventListeners = new ArrayList(); + private boolean isClosed = false; + private Object mHandler; + + public Proxy(Socket s, Sandbox sb, Object handler) throws IOException{ + this.s = s; + sandbox = sb; + this.mHandler = handler; + out = new DataOutputStream(s.getOutputStream()); + in = new DataInputStream(s.getInputStream()); + pool = new ThreadPoolExecutor(10, 10, 10, TimeUnit.SECONDS, new LinkedBlockingQueue()); + } + + public void start(){ + new Thread(new ReaderThread()).start(); + } + + synchronized public byte[] sendRequestReply(byte[] data) throws IOException{ + if(isClosed) + throw new IOException("Connection is closed."); + + Message msg = new Message(conversationCounter++, data, RUN_COMMAND); + final Object[] result = new Object[1]; + result[0] = null; + conversations.put(new Integer(msg.getConversationId()), new MessageListener() { + public void gotReply(byte[] msg) { + synchronized (result) { + result[0] = msg; + result.notify(); + } + } + }); + write(msg); + synchronized (result) { + if(result[0]==null){ + try { + result.wait(); + } catch (InterruptedException e) { + } + } + } + return (byte[])result[0]; + } + + public void sendClose() throws IOException{ + synchronized (out) { + out.writeByte(CLOSE); + } + } + + synchronized public void close(){ + if(isClosed) + return; + + isClosed = true; + //Close the socket + try{ + s.shutdownOutput(); + }catch(Throwable t){} + try{ + s.shutdownInput(); + }catch(Throwable t){} + try{ + s.close(); + }catch(Throwable t){} + notifyCloseEventListeners(); + pool.shutdown(); + } + + public boolean isClosed(){ + return isClosed; + } + + private void write(Message msg) throws IOException { + synchronized (out) { + out.writeByte(msg.getTaskId()); + out.writeInt(msg.getConversationId()); + out.writeInt(msg.getData().length); + out.write(msg.getData()); + } + } + + synchronized public void addCloseEventListener(CloseEventListener l){ + closeEventListeners.add(l); + } + + synchronized private void notifyCloseEventListeners(){ + for(Iterator iter=closeEventListeners.iterator(); iter.hasNext();){ + CloseEventListener l = iter.next(); + l.socketClosed(s); + iter.remove(); + } + } + + private class ReaderThread implements Runnable{ + + public void run(){ + + for(;;){ + + //read the task first + try { + byte taskId = in.readByte(); + if(taskId == CLOSE){ + //Send close in return if possible + //and then close socket + sendClose(); + //Close the socket + close(); + break; + } + if(taskId == -1){ + mLog.info("Socket is closed ." ); + break; + } + int conversationId = in.readInt(); + int len = in.readInt(); + byte[] data = new byte[len]; + int i = in.read(data); + int offset = 0; + while(i < len){ + if(i == -1){ + break; + } + //make sure to read all data. this is important + len -= i; + offset += i; + i = in.read(data, offset, len); + } + + if(i == -1){ + mLog.info("Socket is closed while still reading data." ); + data = null; + break; + } + + final Message msg = new Message(conversationId, data, taskId); + if(taskId == RUN_COMMAND){ + pool.execute(new Runnable() { + public void run() { + byte[] output = sandbox.execute(msg.getData(), mHandler); + msg.setData(output); + msg.setTaskId(GOT_REPLY); + //send the reply back + try { + write(msg); + } catch (IOException e) { + mLog.log(Level.WARNING, "Could not sent the reply back for Message = " + msg, e); + } + } + }); + }else if(taskId == GOT_REPLY){ + pool.execute(new Runnable() { + public void run() { + MessageListener l = conversations.remove(new Integer(msg.getConversationId())); + if(l == null){ + mLog.warning("No one was waiting for this reply. = " + msg); //ignore + }else{ + l.gotReply(msg.getData()); + } + } + }); + }else{ + mLog.warning("Invalid task ID received. Message = " + msg); + } + } catch (IOException e) { + mLog.warning("Socket is closed abruptly. " + e.getMessage()); + close(); + break; + } + + + } + } + } + + public interface CloseEventListener{ + public void socketClosed(Socket s); + } + + private interface MessageListener { + void gotReply(byte[] msg); + } + + private class Message { + + private int conversationId; + private byte[] data; + private byte taskId; + + public Message(int conversationId, byte[] data, byte taskId){ + this.conversationId = conversationId; + this.data = data; + this.taskId = taskId; + } + + public byte[] getData() { + return data; + } + + public void setData(byte[] data) { + this.data = data; + } + + public byte getTaskId() { + return taskId; + } + + public void setTaskId(byte taskId) { + this.taskId = taskId; + } + + public int getConversationId() { + return conversationId; + } + + @Override + public String toString() { + return ("ConversationId=" + conversationId + ", TaskId=" + taskId); + } + + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Sandbox.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Sandbox.java new file mode 100644 index 000000000..d1a3e9ce2 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Sandbox.java @@ -0,0 +1,9 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +public interface Sandbox { + + public byte[] execute(byte[] data, Object handler); +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxClassLoader.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxClassLoader.java new file mode 100644 index 000000000..1a892c509 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxClassLoader.java @@ -0,0 +1,70 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.InputStream; + +public class SandboxClassLoader extends ClassLoader { + + static public final String EXECUTOR_CLASS; + static private boolean isExecutorLoaded = false; + static private byte[] executorBytes; + static private final ClassLoader PARENT_CLASSLOADER = SandboxClassLoader.class.getClassLoader(); + static{ + String name = SandboxClassLoader.class.getName(); + EXECUTOR_CLASS = name.substring(0, name.lastIndexOf('.')) + ".SandboxImpl"; + InputStream in = null; + try{ + in = PARENT_CLASSLOADER.getResourceAsStream(EXECUTOR_CLASS.replace('.', '/') + ".class"); + if(in != null){ + executorBytes = Util.readBytes(in); + isExecutorLoaded = true; + } + } catch (Throwable e) { + }finally{ + Util.closeStream(in); + } + } + private Proxy mProxy; + + public SandboxClassLoader(){ + super(PARENT_CLASSLOADER); + if(!isExecutorLoaded) + throw new RuntimeException("Could not instantiate CustomClassLoader"); + } + + public void setProxy(Proxy p){ + mProxy = p; + } + + @Override + protected synchronized Class loadClass(String name, boolean resolve) + throws ClassNotFoundException { + if(name.equals(EXECUTOR_CLASS)){ + return findClass(name); + }else{ + return super.loadClass(name, resolve); + } + } + + @Override + protected Class findClass(String name) throws ClassNotFoundException { + byte[] clsBytes; + if(name.equals(EXECUTOR_CLASS)){ + clsBytes = executorBytes; + }else{ + GetClassCommand c = new GetClassCommand(); + c.setClassName(name); + try { + byte[] request = Util.serializeObject(c); + byte[] reply = mProxy.sendRequestReply(request); + clsBytes = (byte[])Util.deserializeObject(reply); + } catch (Throwable e) { + throw new ClassNotFoundException("Could not load class " + name, e); + } + } + return defineClass(name, clsBytes, 0, clsBytes.length); + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxImpl.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxImpl.java new file mode 100644 index 000000000..4485f1ad8 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/SandboxImpl.java @@ -0,0 +1,50 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.ObjectInputStream; + +import javax.jbi.component.ComponentContext; + + +public class SandboxImpl implements Sandbox{ + private static final byte[] BAD_REPLY; + + static{ + BAD_REPLY = new byte[2]; + BAD_REPLY[0] = 0; + BAD_REPLY[0] = 0; + } + + public byte[] execute(byte[] data, Object handler) { + byte[] reply = null; + try{ + Command c = deserializeObject(data); + reply = Util.serializeObject(c.execute((ComponentContext)handler)); + } catch (Throwable e) { + try { + reply = Util.serializeObject(e); + } catch (IOException e1) {} + } + if(reply == null) + reply = BAD_REPLY; + return reply; + + } + + private static Command deserializeObject(byte[] data) throws IOException, ClassNotFoundException{ + ObjectInputStream oin = null; + Command c; + try{ + oin = new ObjectInputStream(new ByteArrayInputStream(data)); + c = (Command)oin.readObject(); + }finally{ + Util.closeStream(oin); + } + return c; + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Util.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Util.java new file mode 100644 index 000000000..cc8f25403 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/core/Util.java @@ -0,0 +1,61 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.core; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +final public class Util { + + public static void closeStream(Closeable s){ + if(s == null) + return; + try{ + s.close(); + }catch(Throwable t){} + } + + public static byte[] readBytes(InputStream fin) throws IOException { + ByteArrayOutputStream bout = new ByteArrayOutputStream(1028); + try { + byte[] buf = new byte[1028]; + int len; + while ((len = fin.read(buf)) != -1) { + bout.write(buf, 0, len); + } + byte[] clsBytes = bout.toByteArray(); + return clsBytes; + } finally { + closeStream(bout); + } + } + public static Object deserializeObject(byte[] data) throws IOException, ClassNotFoundException{ + ObjectInputStream oin = null; + Object c; + try{ + oin = new ObjectInputStream(new ByteArrayInputStream(data)); + c = oin.readObject(); + }finally{ + closeStream(oin); + } + return c; + } + + public static byte[] serializeObject(Object obj) throws IOException{ + ObjectOutputStream oout = null; + ByteArrayOutputStream bout = new ByteArrayOutputStream(1028); + try{ + oout = new ObjectOutputStream(bout); + oout.writeObject(obj); + return bout.toByteArray(); + }finally{ + closeStream(oout); + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/JbiHelper.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/JbiHelper.java new file mode 100644 index 000000000..09c12febe --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/JbiHelper.java @@ -0,0 +1,223 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.impl; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; + +import javax.jbi.JBIException; +import javax.jbi.component.ComponentContext; +import javax.jbi.messaging.MessageExchange; +import javax.jbi.messaging.MessagingException; +import javax.jbi.servicedesc.ServiceEndpoint; +import javax.transaction.Status; +import javax.transaction.Transaction; +import javax.transaction.TransactionManager; +import javax.xml.namespace.QName; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; + +final public class JbiHelper { + + private static TransformerFactory sTransformerFactory = TransformerFactory + .newInstance(); + private static DocumentBuilder sBuilder; + private static String JBI_WSDL_11_WRAPPER_BEGIN1 = " mCache = new Hashtable(); + private static ThreadPoolExecutor sThreadPool; + + private static MessageProcessor sMessageProcessor; + + static void start(ComponentContext componentContext) throws MessagingException{ + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setNamespaceAware(true); + try { + sBuilder = factory.newDocumentBuilder(); + } catch (ParserConfigurationException e) { + throw new RuntimeException( + "Could not instantiate document builder."); + } + sThreadPool = new ThreadPoolExecutor(10, 10, 30, TimeUnit.SECONDS, new LinkedBlockingQueue()); + + sMessageProcessor = new MessageProcessor(componentContext); + sMessageProcessor.start(); + } + + static void stop(){ + if(sMessageProcessor != null){ + sMessageProcessor.stop(); + sMessageProcessor = null; + } + + if(sThreadPool != null){ + sThreadPool.shutdownNow(); + sThreadPool = null; + } + sBuilder = null; + } + + public static Object getSavedObject(String key){ + return mCache.get(key); + } + + public static Object saveObject(String key, Object obj){ + return mCache.put(key, obj); + } + + public static Transaction startTransaction(ComponentContext context) + throws Exception { + Transaction tx = null; + + TransactionManager txManager = (TransactionManager) context + .getTransactionManager(); + txManager.begin(); + tx = txManager.getTransaction(); + if (tx == null) { + throw new Exception("Could not start strasaction"); + } + return tx; + } + + public static Transaction suspendThreadTx(ComponentContext context) + throws Exception { + return ((TransactionManager) context.getTransactionManager()).suspend(); + } + + public static void resumeTransaction(ComponentContext context, + Transaction currentTx) throws Exception { + if (currentTx != null) { + if (currentTx.getStatus() == Status.STATUS_NO_TRANSACTION) { + ((TransactionManager) context.getTransactionManager()) + .resume(currentTx); + } else { + //Transaction is already associated with the current thread + } + } + } + + public static DOMSource fromXMLToDOMSource(String xml) throws SAXException, + IOException { + Document doc = sBuilder.parse(new InputSource(new StringReader(xml))); + return new DOMSource(doc); + } + + public static String transformToString(Source src, String encoding) + throws Exception { + Transformer trans = sTransformerFactory.newTransformer(); + String xmlData = null; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + trans.setOutputProperties(null); // reset anything previously set + trans.setOutputProperty(OutputKeys.ENCODING, encoding); + trans.setOutputProperty(OutputKeys.INDENT, "yes"); + trans.setOutputProperty(OutputKeys.METHOD, "xml"); + trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + trans.transform(src, new StreamResult(baos)); + xmlData = baos.toString(encoding); + return xmlData; + } + + public static String wrapIntoJBIMessage(QName message, String[] parts) { + StringBuffer buf = new StringBuffer(); + buf.append(JBI_WSDL_11_WRAPPER_BEGIN1.replaceFirst("NS", message + .getNamespaceURI())); + buf.append(JBI_WSDL_11_WRAPPER_BEGIN2.replaceFirst("MSG", message + .getLocalPart())); + for (int i = 0; i < parts.length; ++i) { + buf + .append(JBI_WSDL_11_WRAPPER_PART.replaceFirst("VALUE", + parts[i])); + } + buf.append(JBI_WSDL_11_WRAPPER_END); + return buf.toString(); + } + + public static Object[] unwrapFromJBIMessage(Node root) { + ArrayList result = new ArrayList(); + NodeList nodeList = root.getChildNodes(); + for (int i = 0; i < nodeList.getLength(); ++i) { + Node node = nodeList.item(i); + result.add(node.getFirstChild()); + } + return result.toArray(); + } + + public static Object[] unwrapFromJBISource(Source source) throws Exception { + DOMResult result = new DOMResult(); + Transformer trans = sTransformerFactory.newTransformer(); + trans.setOutputProperties(null); // reset anything previously set + trans.setOutputProperty(OutputKeys.METHOD, "xml"); + trans.transform(source, result); + Node root = result.getNode(); + if (root instanceof Document) { + root = root.getFirstChild(); + } + return unwrapFromJBIMessage(root); + } + + public static DOMResult transformToDOMResult(Source source) + throws Exception { + DOMResult result = new DOMResult(); + Transformer trans = sTransformerFactory.newTransformer(); + trans.setOutputProperties(null); // reset anything previously set + trans.setOutputProperty(OutputKeys.METHOD, "xml"); + trans.transform(source, result); + return result; + } + + public static void execute(Runnable cmd){ + sThreadPool.execute(cmd); + } + + public static void registerEndPoint(QName serviceName, String endpointName){ + sMessageProcessor.registerEndPoint(serviceName, endpointName); + } + + public static void registerEndPoint(QName serviceName, String endpointName, MessageConsumer c){ + sMessageProcessor.registerEndPoint(serviceName, endpointName, c); + } + + public static Object unregisterEndPoint(QName serviceName, String endpointName){ + return sMessageProcessor.unregisterEndPoint(serviceName, endpointName); + } + + public static MessageExchange getNextMessage(QName serviceName, String endpointName){ + return sMessageProcessor.getNextMessage(serviceName, endpointName); + } + + public static void activateEndpoint(ComponentContext context, QName serviceName, String endpointName) throws JBIException{ + sMessageProcessor.registerEndPoint(serviceName, endpointName); + context.activateEndpoint(serviceName, endpointName); + } + + public static void deactivateEndpoint(ComponentContext context, QName serviceName, String endpointName) throws JBIException{ + ServiceEndpoint ep = context.getEndpoint(serviceName, endpointName); + sMessageProcessor.unregisterEndPoint(serviceName, endpointName); + context.deactivateEndpoint(ep); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageConsumer.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageConsumer.java new file mode 100644 index 000000000..c8ae2b950 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageConsumer.java @@ -0,0 +1,12 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.impl; + +import javax.jbi.messaging.MessageExchange; + +public interface MessageConsumer { + + public void onMessage(MessageExchange ex) throws Exception; + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageProcessor.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageProcessor.java new file mode 100644 index 000000000..2a614e8e7 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/MessageProcessor.java @@ -0,0 +1,130 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.impl; + +import java.util.Hashtable; +import java.util.LinkedList; +import java.util.List; +import java.util.Vector; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.jbi.component.ComponentContext; +import javax.jbi.messaging.DeliveryChannel; +import javax.jbi.messaging.MessageExchange; +import javax.jbi.messaging.MessagingException; +import javax.jbi.servicedesc.ServiceEndpoint; +import javax.xml.namespace.QName; + +public class MessageProcessor implements Runnable { + private static final Logger mLog = Logger.getLogger(MessageProcessor.class.getName()); + private ComponentContext mComponentContext; + private DeliveryChannel mDeliveryChannel; + private boolean stop; + private Hashtable mConsumers = new Hashtable(); + + + MessageProcessor(ComponentContext ctx) throws MessagingException{ + mComponentContext = ctx; + mDeliveryChannel = mComponentContext.getDeliveryChannel(); + } + + public void run() { + + while(!stop){ + try { + final MessageExchange ex = mDeliveryChannel.accept(1000 * 60); + if(ex == null) + continue; + + JbiHelper.execute(new Runnable() { + public void run() { + try{ + processMessage(ex); + }catch(Throwable t){ + mLog.log(Level.INFO, "Error processing message.", t); + } + } + }); + + } catch (MessagingException e) { + mLog.log(Level.INFO, "Error accepting message exchanges from delivery channel.", e); + } + } + + } + + private void processMessage(MessageExchange ex) throws Exception{ + ServiceEndpoint ep = ex.getEndpoint(); + String key = getKey(ep.getServiceName(), ep.getEndpointName()); + Object obj = mConsumers.get(key); + if(obj == null){ + mLog.log(Level.INFO, + "Message Exchange available for the end point " + key + + " not active anymore. Drop the message exchange"); + return; + } + + if(obj instanceof LinkedList){ + synchronized (obj) { + ((LinkedList)obj).addLast(ex); + } + }else{ + ((MessageConsumer)obj).onMessage(ex); + } + } + + synchronized public void stop(){ + stop = true; + } + + public void start(){ + stop = false; + JbiHelper.execute(this); + } + + public void registerEndPoint(QName serviceName, String endpointName){ + registerEndPoint(serviceName, endpointName, new LinkedList()); + } + + public void registerEndPoint(QName serviceName, String endpointName, MessageConsumer c){ + registerEndPoint(serviceName, endpointName, c); + } + + private void registerEndPoint(QName serviceName, String endpointName, Object obj){ + mConsumers.put(getKey(serviceName, endpointName), obj); + } + + private String getKey(QName serviceName, String endpointName) { + return serviceName.toString() + "-" + endpointName; + } + + public Object unregisterEndPoint(QName serviceName, String endpointName){ + Object result = mConsumers.remove(getKey(serviceName, endpointName)); + if(result instanceof LinkedList){ + synchronized (result) { + ((LinkedList)result).clear(); + } + } + return result; + } + + public MessageExchange getNextMessage(QName serviceName, String endpointName){ + Object obj = mConsumers.get(getKey(serviceName, endpointName)); + if(obj instanceof LinkedList){ + synchronized (obj) { + LinkedList l = (LinkedList)obj; + if(l.size() != 0){ + return l.removeFirst(); + } + } + } + + return null; + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEBootstrap.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEBootstrap.java new file mode 100644 index 000000000..a3ea29c31 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEBootstrap.java @@ -0,0 +1,33 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.impl; + +import javax.jbi.JBIException; +import javax.jbi.component.Bootstrap; +import javax.jbi.component.InstallationContext; +import javax.management.ObjectName; + +public class TestSEBootstrap implements Bootstrap { + + public void cleanUp() throws JBIException { + //do nothing + } + + public ObjectName getExtensionMBeanName() { + return null; + } + + public void init(InstallationContext arg0) throws JBIException { + //do nothing + } + + public void onInstall() throws JBIException { + //do nothing + } + + public void onUninstall() throws JBIException { + //do nothing + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponent.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponent.java new file mode 100644 index 000000000..a56ab2c71 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponent.java @@ -0,0 +1,80 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.impl; + +import javax.jbi.component.Component; +import javax.jbi.component.ComponentLifeCycle; +import javax.jbi.component.ServiceUnitManager; +import javax.jbi.management.DeploymentException; +import javax.jbi.messaging.MessageExchange; +import javax.jbi.servicedesc.ServiceEndpoint; + +import org.w3c.dom.Document; +import org.w3c.dom.DocumentFragment; + +public class TestSEComponent implements Component { + + public ComponentLifeCycle getLifeCycle() { + return new TestSEComponentLifeCycle(); + } + + public Document getServiceDescription(ServiceEndpoint arg0) { + // TODO Auto-generated method stub + return null; + } + + public ServiceUnitManager getServiceUnitManager() { + return new MyServiceUnitManager(); + } + + public boolean isExchangeWithConsumerOkay(ServiceEndpoint arg0, + MessageExchange arg1) { + return true; + } + + public boolean isExchangeWithProviderOkay(ServiceEndpoint arg0, + MessageExchange arg1) { + return true; + } + + public ServiceEndpoint resolveEndpointReference(DocumentFragment arg0) { + return null; + } + + private class MyServiceUnitManager implements ServiceUnitManager{ + + public String deploy(String arg0, String arg1) + throws DeploymentException { + // TODO Auto-generated method stub + return null; + } + + public void init(String arg0, String arg1) throws DeploymentException { + // TODO Auto-generated method stub + + } + + public void shutDown(String arg0) throws DeploymentException { + // TODO Auto-generated method stub + + } + + public void start(String arg0) throws DeploymentException { + // TODO Auto-generated method stub + + } + + public void stop(String arg0) throws DeploymentException { + // TODO Auto-generated method stub + + } + + public String undeploy(String arg0, String arg1) + throws DeploymentException { + // TODO Auto-generated method stub + return null; + } + + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponentLifeCycle.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponentLifeCycle.java new file mode 100644 index 000000000..fb580ed00 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/TestSEComponentLifeCycle.java @@ -0,0 +1,52 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.impl; + +import java.io.IOException; + +import javax.jbi.JBIException; +import javax.jbi.component.ComponentContext; +import javax.jbi.component.ComponentLifeCycle; +import javax.management.ObjectName; + +import test.jbi.integration.testbc.core.ConnectionListener; + +public class TestSEComponentLifeCycle implements ComponentLifeCycle { + + private ComponentContext mComponentContext; + private ConnectionListener mConnectionListener; + public ObjectName getExtensionMBeanName() { + return null; + } + + public void init(ComponentContext arg0) throws JBIException { + mComponentContext = arg0; + } + + public void shutDown() throws JBIException { + if(mConnectionListener != null){ + mConnectionListener.close(); + mConnectionListener = null; + } + + JbiHelper.stop(); + } + + public void start() throws JBIException { + shutDown(); //Stop the existing processor first + JbiHelper.start(mComponentContext); + + try{ + mConnectionListener = new ConnectionListener(9888, mComponentContext); + }catch(IOException e){ + throw new JBIException("Could not start TestBC.", e); + } + mConnectionListener.start(); + } + + public void stop() throws JBIException { + shutDown(); + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/jbi.xml new file mode 100644 index 000000000..43b92a285 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/impl/jbi.xml @@ -0,0 +1,29 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + + + + + + + sun-test-engine + BC for testing + + + test.jbi.integration.testbc.impl.TestSEComponent + + classes + + test.jbi.integration.testbc.impl.TestSEBootstrap + + classes + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestHelper.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestHelper.java new file mode 100644 index 000000000..016b5b2fb --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestHelper.java @@ -0,0 +1,123 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.installer; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.zip.CRC32; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +final public class TestHelper { + + public static void jarAllFiles(String base, String destJarFile) + throws IOException { + File baseDir = new File(base); + if (!baseDir.exists() || !baseDir.isDirectory()) { + throw new RuntimeException("Invalid base directory"); + } + // First get all the files under base directory + List list = new ArrayList(); + recursiveTraverse(baseDir, list, ""); + + jarFiles(destJarFile, list); + + } + + public static void jarFiles(String destJarFile, List list) + throws IOException { + FileOutputStream fos = new FileOutputStream(destJarFile); + ZipOutputStream zos = new ZipOutputStream(fos); + int bytesRead; + byte[] buffer = new byte[1024]; + CRC32 crc = new CRC32(); + for (Iterator iter = list.iterator(); iter.hasNext();) { + String[] fileDetails = iter.next(); + File file = new File(fileDetails[0]); + BufferedInputStream bis = new BufferedInputStream( + new FileInputStream(file)); + crc.reset(); + while ((bytesRead = bis.read(buffer)) != -1) { + crc.update(buffer, 0, bytesRead); + } + bis.close(); + // Reset to beginning of input stream + bis = new BufferedInputStream(new FileInputStream(file)); + ZipEntry entry = new ZipEntry((fileDetails[1].equals("") ? "" + : fileDetails[1]) + + file.getName()); + entry.setMethod(ZipEntry.STORED); + entry.setCompressedSize(file.length()); + entry.setSize(file.length()); + entry.setCrc(crc.getValue()); + zos.putNextEntry(entry); + while ((bytesRead = bis.read(buffer)) != -1) { + zos.write(buffer, 0, bytesRead); + } + bis.close(); + } + zos.close(); + } + + public static void recursiveTraverse(File base, List l, + String relativePath) { + File[] files = base.listFiles(); + for (int i = 0; i < files.length; ++i) { + if (files[i].isDirectory()) { + recursiveTraverse(files[i], l, relativePath + + files[i].getName() + "/"); + } else { + l + .add(new String[] { files[i].getAbsolutePath(), + relativePath }); + } + } + } + + public static boolean deleteDirectory(File path) { + if (path.exists()) { + File[] files = path.listFiles(); + for (int i = 0; i < files.length; i++) { + if (files[i].isDirectory()) { + deleteDirectory(files[i]); + } else { + files[i].delete(); + } + } + } + return (path.delete()); + } + + static public void copyFile(String meta, String fileName, + String destinationName) throws IOException { + FileOutputStream fout = new FileOutputStream(meta + File.separator + + destinationName); + BufferedInputStream bis = new BufferedInputStream( + new FileInputStream(fileName)); + int bytesRead; + byte[] buffer = new byte[1024]; + while ((bytesRead = bis.read(buffer)) != -1) { + fout.write(buffer, 0, bytesRead); + } + bis.close(); + fout.close(); + } + + static public void copyFile(String meta, String fileName) throws IOException { + File f = new File(fileName); + if (!f.exists()) { + System.out.println("WARN: Could not add WSDL " + f.getName() + + " to SU"); + return; + } + copyFile(meta, fileName, f.getName()); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestSEInstaller.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestSEInstaller.java new file mode 100644 index 000000000..e23bd07ab --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testbc/installer/TestSEInstaller.java @@ -0,0 +1,56 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testbc.installer; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class TestSEInstaller { + + private static String sInstaller; + + synchronized public static String generateInstaller(String destDir) throws IOException{ + + if(sInstaller != null) + return sInstaller; + + //Clear the directory + File f = new File(destDir); + if(f.exists()){ + TestHelper.deleteDirectory(f); + } + f.mkdirs(); + + String beginsWith = TestSEInstaller.class.getName(); + beginsWith = beginsWith.substring(0, beginsWith.lastIndexOf('.')); + beginsWith = beginsWith.substring(0, beginsWith.lastIndexOf('.')).replace('.', '/'); + beginsWith = "classes/" + beginsWith + "/"; + + URL url = TestSEInstaller.class.getResource("TestSEInstaller.class"); + String path = url.getPath(); + path = path.substring(0, path.lastIndexOf('/')); + path = path.substring(0, path.lastIndexOf('/')); + + List list = new ArrayList(); + TestHelper.recursiveTraverse(new File(path), list, beginsWith); + for(Iterator iter=list.iterator(); iter.hasNext();){ + String[] arr = iter.next(); + if(arr[0].endsWith("jbi.xml")){ + arr[1] = "META-INF/"; + break; + } + } + + String jarName = destDir + "/TestSE.jar"; + TestHelper.jarFiles(jarName, list); + sInstaller = jarName; + return jarName; + + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/Helper.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/Helper.java new file mode 100644 index 000000000..58628666e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/Helper.java @@ -0,0 +1,111 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +package test.jbi.integration.testcases; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; + +import javax.xml.namespace.QName; + +import test.jbi.integration.test.framework.Configuration; +import test.jbi.integration.test.framework.SAAssembler; +import test.jbi.integration.test.framework.SAAssembler.Redelivery; +import test.jbi.integration.test.framework.SAAssembler.Throttling; +import test.jbi.integration.test.framework.impl.FileBCSUAssembler; + +public class Helper { + + public static FileBCSUAssembler createTestSU(String name, String desc, + String wsdlFileName, String inputDir, Class cls) throws IOException { + FileBCSUAssembler su = new FileBCSUAssembler(name, desc); + + String wsdlPath = Configuration.getPath(cls, wsdlFileName); + modifyWsdl(wsdlPath, inputDir); + + su.addWsdl(wsdlPath); + su.setJbiFile(Configuration.getPath(cls, "jbi.xml")); + + return su; + } + + public static String createTestSA(FileBCSUAssembler su, String saName, + QName consumerService, String consumerEndpoint, + QName providerService, String provideEndpoint, Redelivery rd, + Throttling throt) throws IOException { + + SAAssembler sa = new SAAssembler(saName, saName); + sa.addSUAssembler(su); + // Now add connection + sa.addConnection(consumerService, consumerEndpoint, providerService, + provideEndpoint, rd, throt); + + return sa.assemble(Configuration.getWorkingDir()); + } + + public static void modifyWsdl(String wsdlPath, String inputDir) throws IOException { + StringBuilder sb = getResourceContents(wsdlPath); + + String s = sb.toString().replace("FILE_WORKING_DIR", + inputDir); + + s.toString(); + + FileWriter writer = new FileWriter(wsdlPath); + + writer.write(s); + + writer.close(); + + } + + public static StringBuilder getResourceContents(String fileResource) { + + StringBuilder sb = new StringBuilder(); + + try { + + InputStream ins = new FileInputStream(fileResource); + + BufferedReader br = new BufferedReader(new InputStreamReader(ins)); + + while (true) { + String line = br.readLine(); + if (line == null) + break; + sb.append(line + "${symbol_escape}n"); + + } + + br.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return sb; + } + + public static void writeInputFiles(String dir, int numFiles) throws IOException { + + for (int i = 0; i < numFiles; i++) { + String fileName = "test.xml" + i; + writeFile(dir,fileName, "hello world"); + } + + } + + public static void writeFile(String dir, String fileName, String content) throws IOException { + + File f = new File(dir); + f.mkdirs(); + FileWriter w = new FileWriter(dir + File.separator + fileName); + w.write(content); + w.close(); + + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/TestFileProtocol.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/TestFileProtocol.java new file mode 100644 index 000000000..5cb4a31d9 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/TestFileProtocol.java @@ -0,0 +1,284 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/** + * + */ +package test.jbi.integration.testcases.filebcprotocol; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Serializable; + +import javax.jbi.component.ComponentContext; +import javax.jbi.messaging.ExchangeStatus; +import javax.jbi.messaging.InOut; +import javax.xml.namespace.QName; +import javax.jbi.messaging.NormalizedMessage; + +import org.w3c.dom.Text; + +import test.jbi.integration.test.framework.Configuration; +import test.jbi.integration.test.framework.IntegrationTestCase; +import test.jbi.integration.test.framework.SAAssembler; +import test.jbi.integration.test.framework.impl.FileBCSUAssembler; +import test.jbi.integration.testbc.core.Command; +import test.jbi.integration.testbc.impl.JbiHelper; +import test.jbi.integration.testcases.Helper; +import test.jbi.integration.test.framework.SAAssembler.Redelivery; +import test.jbi.integration.test.framework.SAAssembler.Throttling; + +/** + * @author Nitin Nahata + * + */ +public class TestFileProtocol extends IntegrationTestCase { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * service assembly name + */ + private static final String SA_NAME = "FILEBC-TEST_PROTOCOL-SA"; + /** + * consuming end-point + */ + private static final String CONSUMER_EP = "filePort"; + /** + * consuming end-point service name + */ + private static final QName FILE_SERVICE = new QName( + "http://j2ee.netbeans.org/wsdl/file", "fileService"); + + /** + * provider end-point service name + */ + private static final QName PROVIDER_SERVICE = new QName( + "urn:FILEBC-TEST_RECOVERY-SA", "testService"); + + /** + * provider end-point + */ + private static final String PROVIDER_EP = "providerEP"; + + + /** + * A file with the same name as the output file already exists. + * WSDL has protect=true on file:message but protectDirectory is not specified + * Existing output file should be renamed to: + + ".protected", in + * the existing location. + */ + public void testOutProtectNoProtectDir() throws Throwable { + + String inputDir = Configuration.getWorkingDir() + File.separator + "file-bc-protocol"; + + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU( + "FILE-BC-SU-ProtocolTest", "FILE-BC-SU-ProtocolTest", + "outProtect-No-ProtectDir.wsdl", inputDir, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, + FILE_SERVICE, CONSUMER_EP, PROVIDER_SERVICE, PROVIDER_EP, null, + null); + String saName = null; + try { + + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + Helper.writeInputFiles(inputDir, 1); + + // create pre-existing output file which should be protected + Helper.writeFile(inputDir, "output.xml", "dummy"); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(2000); // wait some time before SU start sending + // messages + + ReceiveMsgCommand receviceMsgCommand = new ReceiveMsgCommand(); + String str; + int i = 0; + while (!(str = (String) getConnection().execute(receviceMsgCommand)) + .equals("FAIL")) { + i++; + } + + System.out.println("No of messages received by Test BC: " + i); + + // wait for the output file to be written + Thread.sleep(1000); + + // check in-the-way file has been renamed in the existing location. + File fInDir = new File(inputDir); + File[] protectedfiles = fInDir.listFiles(new FilenameFilter(){ + public boolean accept(File dir, String name) { + if(name.startsWith("output.xml") && name.endsWith(".protected")){ + return true; + } + return false; + } + }); + + assertEquals(1, protectedfiles.length); + + } finally { + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + + /** + * A file with the same name as the output file already exists. + * WSDL has protect=true on file:message and protectDirectory="protect" + * Existing output file should be tagged and moved to protectDirectory ie. to + * /protect/ + */ + public void testOutProtectWithProtectDir() throws Throwable { + + String inputDir = Configuration.getWorkingDir() + File.separator + "file-bc-protocol"; + + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU( + "FILE-BC-SU-ProtocolTest", "FILE-BC-SU-ProtocolTest", + "outProtect-With-ProtectDir.wsdl", inputDir, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, + FILE_SERVICE, CONSUMER_EP, PROVIDER_SERVICE, PROVIDER_EP, null, + null); + String saName = null; + try { + + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + Helper.writeInputFiles(inputDir, 1); + + // create pre-existing output file which should be protected + Helper.writeFile(inputDir, "output.xml", "dummy"); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(2000); // wait some time before SU start sending + // messages + + // Drain all the messages meant for this EP + ReceiveMsgCommand receviceMsgCommand = new ReceiveMsgCommand(); + String str; + int i = 0; + while (!(str = (String) getConnection().execute(receviceMsgCommand)) + .equals("FAIL")) { + i++; + } + + System.out.println("No of messages received by Test BC: " + i); + + // wait for the output file to be written + Thread.sleep(5000); + + // this is the protectDir name in the WSDL. + String protectDirName = "protect"; + + // check in-the-way file has been moved to protect dir. + File fInDir = new File(inputDir + File.separator + protectDirName); + File[] protectedfiles = fInDir.listFiles(new FilenameFilter(){ + public boolean accept(File dir, String name) { + if(name.startsWith("output.xml") && name.endsWith(".protected")){ + return true; + } + return false; + } + }); + + assertEquals(1, protectedfiles.length); + + } finally { + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + // Make sure that SA is undeployed + try { + getInstaller().undeployServiceAssembly(SA_NAME); + } catch (Throwable t) { + } + + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public static class ActivateDeactivateEP implements Command { + private static final long serialVersionUID = 1L; + public boolean activate; + + public Serializable execute(ComponentContext context) throws Exception { + if (activate) { + JbiHelper.activateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } else { + JbiHelper.deactivateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } + return "SUCCESS"; + } + } + + public static class ReceiveMsgCommand implements Command { + private static final long serialVersionUID = 1L; + + public Serializable execute(ComponentContext context) throws Exception { + InOut ex = (InOut) JbiHelper.getNextMessage(PROVIDER_SERVICE, + PROVIDER_EP); + Object[] results = null; + if (ex != null && ex.getStatus() != ExchangeStatus.ERROR) { + NormalizedMessage nm = ex.createMessage(); + + if (ex.getStatus() != ExchangeStatus.DONE) { + + ex.setService(FILE_SERVICE); + results = JbiHelper.unwrapFromJBISource(ex.getInMessage() + .getContent()); + nm.setContent(ex.getInMessage().getContent()); + ex.setOutMessage(nm); + context.getDeliveryChannel().sendSync(ex); + + } + + if(ex.getStatus() == ExchangeStatus.DONE){ + return "PASS"; + } else { + Object[] errorDetails = new Object[]{ex.getError(), ex.getProperty("com.sun.jbi.crl.faultcode")}; + return errorDetails; + } + + } + if (results != null && results.length > 0) { + return ((Text) results[0]).getTextContent(); + } + return "FAIL"; + } + + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/jbi.xml new file mode 100644 index 000000000..080b46a24 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/jbi.xml @@ -0,0 +1,9 @@ +#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/test/jbi/integration/testcases/filebcprotocol/outProtect-No-ProtectDir.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-No-ProtectDir.wsdl new file mode 100644 index 000000000..78d7a8a1d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-No-ProtectDir.wsdl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-With-ProtectDir.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-With-ProtectDir.wsdl new file mode 100644 index 000000000..febc1a54e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/filebcprotocol/outProtect-With-ProtectDir.wsdl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/TestNMProperties.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/TestNMProperties.java new file mode 100644 index 000000000..6500c06de --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/TestNMProperties.java @@ -0,0 +1,309 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/** + * + */ +package test.jbi.integration.testcases.nmprops; + +import java.io.File; +import java.io.Serializable; + +import javax.jbi.component.ComponentContext; +import javax.jbi.messaging.ExchangeStatus; +import javax.jbi.messaging.InOut; +import javax.xml.namespace.QName; +import javax.xml.transform.Source; +import javax.jbi.messaging.NormalizedMessage; + +import org.w3c.dom.Text; + +import com.sun.jbi.filebc.FileMeta; + +import test.jbi.integration.test.framework.Configuration; +import test.jbi.integration.test.framework.IntegrationTestCase; +import test.jbi.integration.test.framework.impl.FileBCSUAssembler; +import test.jbi.integration.testbc.core.Command; +import test.jbi.integration.testbc.impl.JbiHelper; +import test.jbi.integration.testcases.Helper; + +/** + * @author Nitin Nahata + * + */ +public class TestNMProperties extends IntegrationTestCase { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * service assembly name + */ + private static final String SA_NAME = "FILEBC-TEST_PROTOCOL-SA"; + /** + * consuming end-point + */ + private static final String CONSUMER_EP = "filePort"; + /** + * consuming end-point service name + */ + private static final QName FILE_SERVICE = new QName( + "http://j2ee.netbeans.org/wsdl/file", "fileService"); + + /** + * provider end-point service name + */ + private static final QName PROVIDER_SERVICE = new QName( + "urn:FILEBC-TEST_RECOVERY-SA", "testService"); + + /** + * provider end-point + */ + private static final String PROVIDER_EP = "providerEP"; + + private static final String NMPROP_OUT_FILENAME = "nm_prop_output.xml"; + private static final String WSDL_OUT_FILENAME = "output.xml"; + + /** + * Test Dynamic Normalized Message Properties + * Test BC provider response message has NM (Normalized Message) properties set. + * Values of the properties from the NM should override values configured in WSDL + */ + public void testNMProperties() throws Throwable { + + String inputDir = Configuration.getWorkingDir() + File.separator + "nm-properties"; + + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU( + "FILE-BC-SU-ProtocolTest", "FILE-BC-SU-ProtocolTest", + "in-out.wsdl", inputDir, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, + FILE_SERVICE, CONSUMER_EP, PROVIDER_SERVICE, PROVIDER_EP, null, + null); + String saName = null; + try { + + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + Helper.writeInputFiles(inputDir, 1); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(2000); // wait some time before SU start sending + // messages + + + // Dynamic dir and filename that will be set by Test BC provider. + String dyDir = Configuration.getWorkingDir() + File.separator + "nm-properties" + + File.separator + "dynamic-out"; + String dyFileName = "nm_prop_output.xml"; + + //Make Test BC receive and respond to the message + ResponseWithNMPropertyCommand receviceMsgCommand = + new ResponseWithNMPropertyCommand( dyDir, dyFileName); + String str; + int i = 0; + while (!(str = (String) getConnection().execute(receviceMsgCommand)) + .equals("FAIL")) { + i++; + } + + // wait for the output file to be written + Thread.sleep(1000); + + // Check output file was written to dynamic dir and filename instead of + // whats configured in the WSDL. + File outFile = new File(dyDir + File.separator + dyFileName); + System.out.println("Checking output file: " + outFile.getAbsolutePath()); + assertEquals(true, outFile.exists()); + + } finally { + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + /** + * Negative Test - Dynamic Normalized Message Properties + * Test BC provider response message has NO NM (Normalized Message) properties set. + * Configurations from the WSDL would apply in this case. + */ + public void testNoNMProperties() throws Throwable { + + String inputDir = Configuration.getWorkingDir() + File.separator + "nm-properties"; + + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU( + "FILE-BC-SU-ProtocolTest", "FILE-BC-SU-ProtocolTest", + "in-out.wsdl", inputDir, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, + FILE_SERVICE, CONSUMER_EP, PROVIDER_SERVICE, PROVIDER_EP, null, + null); + String saName = null; + try { + + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + Helper.writeInputFiles(inputDir, 1); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(2000); // wait some time before SU start sending + // messages + + //Make Test BC receive and respond to the message + ResponseWithOutNMPropertyCommand receviceMsgCommand = new ResponseWithOutNMPropertyCommand(); + String str; + int i = 0; + while (!(str = (String) getConnection().execute(receviceMsgCommand)) + .equals("FAIL")) { + i++; + } + + // wait for the output file to be written + Thread.sleep(1000); + + // Output file should be written at the filename and dir specified in the WSDL. + File outFile = new File(inputDir + File.separator + WSDL_OUT_FILENAME); + System.out.println("Checking output file: " + outFile.getAbsolutePath()); + assertEquals(true, outFile.exists()); + + } finally { + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + // Make sure that SA is undeployed + try { + getInstaller().undeployServiceAssembly(SA_NAME); + } catch (Throwable t) { + } + + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public static class ActivateDeactivateEP implements Command { + private static final long serialVersionUID = 1L; + public boolean activate; + + public Serializable execute(ComponentContext context) throws Exception { + if (activate) { + JbiHelper.activateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } else { + JbiHelper.deactivateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } + return "SUCCESS"; + } + } + + public static class ResponseWithNMPropertyCommand implements Command { + private static final long serialVersionUID = 1L; + + //dynamic dir and filename + String dyDir; + String dyFileName; + + ResponseWithNMPropertyCommand(String dir, String fileName){ + dyDir = dir; + dyFileName = fileName; + } + + public Serializable execute(ComponentContext context) throws Exception { + InOut ex = (InOut) JbiHelper.getNextMessage(PROVIDER_SERVICE, + PROVIDER_EP); + Object[] results = null; + if (ex != null && ex.getStatus() != ExchangeStatus.ERROR) { + NormalizedMessage nm = ex.createMessage(); + + if (ex.getStatus() != ExchangeStatus.DONE) { + ex.setService(FILE_SERVICE); + results = JbiHelper.unwrapFromJBISource(ex.getInMessage() + .getContent()); + + // send response with NM Properties + + nm.setProperty(FileMeta.NMPROP_INBOUND_FILEDIR, dyDir); + nm.setProperty(FileMeta.NMPROP_INBOUND_FILENAME, dyFileName); + nm.setContent(ex.getInMessage().getContent()); + ex.setOutMessage(nm); + context.getDeliveryChannel().sendSync(ex); + } + + if(ex.getStatus() == ExchangeStatus.DONE){ + return "PASS"; + } else{ + Object[] errorDetails = new Object[]{ex.getError(), ex.getProperty("com.sun.jbi.crl.faultcode")}; + return errorDetails; + } + + } + + if (results != null && results.length > 0) { + return ((Text) results[0]).getTextContent(); + } + + return "FAIL"; + } + } + + public static class ResponseWithOutNMPropertyCommand implements Command { + private static final long serialVersionUID = 1L; + + public Serializable execute(ComponentContext context) throws Exception { + InOut ex = (InOut) JbiHelper.getNextMessage(PROVIDER_SERVICE, + PROVIDER_EP); + Object[] results = null; + if (ex != null && ex.getStatus() != ExchangeStatus.ERROR) { + NormalizedMessage nm = ex.createMessage(); + + if (ex.getStatus() != ExchangeStatus.DONE) { + ex.setService(FILE_SERVICE); + results = JbiHelper.unwrapFromJBISource(ex.getInMessage() + .getContent()); + + // send response with no NM Properties. + Source content = ex.getInMessage().getContent(); + nm.setContent(content); + ex.setOutMessage(nm); + context.getDeliveryChannel().sendSync(ex); + } + + if(ex.getStatus() == ExchangeStatus.DONE){ + return "PASS"; + } else{ + Object[] errorDetails = new Object[]{ex.getError(), ex.getProperty("com.sun.jbi.crl.faultcode")}; + return errorDetails; + } + + } + + if (results != null && results.length > 0) { + return ((Text) results[0]).getTextContent(); + } + + return "FAIL"; + } + + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/in-out.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/in-out.wsdl new file mode 100644 index 000000000..78d7a8a1d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/in-out.wsdl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/jbi.xml new file mode 100644 index 000000000..080b46a24 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/nmprops/jbi.xml @@ -0,0 +1,9 @@ +#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/test/jbi/integration/testcases/recovery/TestRecovery.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/TestRecovery.java new file mode 100644 index 000000000..b800dd849 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/TestRecovery.java @@ -0,0 +1,191 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/** + * + */ +package test.jbi.integration.testcases.recovery; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Serializable; + +import javax.jbi.component.ComponentContext; +import javax.jbi.messaging.ExchangeStatus; +import javax.jbi.messaging.InOut; +import javax.xml.namespace.QName; + +import org.w3c.dom.Text; + +import test.jbi.integration.test.framework.Configuration; +import test.jbi.integration.test.framework.IntegrationTestCase; +import test.jbi.integration.test.framework.SAAssembler; +import test.jbi.integration.test.framework.impl.FileBCSUAssembler; +import test.jbi.integration.testbc.core.Command; +import test.jbi.integration.testbc.impl.JbiHelper; +import test.jbi.integration.testcases.Helper; +import test.jbi.integration.test.framework.SAAssembler.Redelivery; +import test.jbi.integration.test.framework.SAAssembler.Throttling; + +import com.sun.jbi.filebc.util.EPUtil; + +/** + * @author Sujit Biswas + * + */ +public class TestRecovery extends IntegrationTestCase { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * service assembly name + */ + private static final String SA_NAME = "FILEBC-TEST_RECOVERY-SA"; + /** + * consuming end-point + */ + private static final String CONSUMER_EP = "filePort"; + /** + * consuming end-point service name + */ + private static final QName FILE_SERVICE = new QName( + "http://j2ee.netbeans.org/wsdl/file", "fileService"); + + /** + * provider end-point service name + */ + private static final QName PROVIDER_SERVICE = new QName( + "urn:FILEBC-TEST_RECOVERY-SA", "testService"); + + /** + * provider end-point + */ + private static final String PROVIDER_EP = "providerEP"; + + /** + * test recovery in file-bc + * + * @throws Throwable + */ + public void testRecovery() throws Throwable { + + String inputDir = Configuration.getWorkingDir() + File.separator + "recovery"; + + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU( + "FILE-BC-SU-RecoveryTest", "FILE-BC-SU-RecoveryTest", + "file.wsdl", inputDir, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, + FILE_SERVICE, CONSUMER_EP, PROVIDER_SERVICE, PROVIDER_EP, null, + null); + String saName = null; + try { + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + // number of files to recover + String epWorkAreaBase = inputDir + File.separator + EPUtil.getWorkAreaBaseDir(FILE_SERVICE, CONSUMER_EP); + + String workArea = epWorkAreaBase + File.separator + "filebc-in-processing"; + int rCount = 5; + Helper.writeInputFiles(workArea, rCount); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(2000); // wait some time before SU start sending + // messages + + // Drain all the messages meant for this EP + ReceiveMsgCommand receviceMsgCommand = new ReceiveMsgCommand(); + String str; + int i = 0; + while (!(str = (String) getConnection().execute(receviceMsgCommand)) + .equals("FAIL")) { + + System.out.println(str); + i++; + + } + + assertEquals(rCount, i); + + } finally { + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + // Make sure that SA is undeployed + try { + getInstaller().undeployServiceAssembly(SA_NAME); + } catch (Throwable t) { + } + + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + public static class ActivateDeactivateEP implements Command { + /** + * + */ + private static final long serialVersionUID = 1L; + public boolean activate; + + public Serializable execute(ComponentContext context) throws Exception { + if (activate) { + JbiHelper.activateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } else { + JbiHelper.deactivateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } + return "SUCCESS"; + } + } + + public static class ReceiveMsgCommand implements Command { + /** + * + */ + private static final long serialVersionUID = 1L; + + public Serializable execute(ComponentContext context) throws Exception { + InOut ex = (InOut) JbiHelper.getNextMessage(PROVIDER_SERVICE, + PROVIDER_EP); + Object[] results = null; + if (ex != null && ex.getStatus() != ExchangeStatus.ERROR) { + // ex.setStatus(ExchangeStatus.DONE); + if (ex.getStatus() != ExchangeStatus.DONE) { + results = JbiHelper.unwrapFromJBISource(ex.getInMessage() + .getContent()); + ex.setOutMessage(ex.getInMessage()); + context.getDeliveryChannel().send(ex); + } + } + if (results != null && results.length > 0) { + return ((Text) results[0]).getTextContent(); + } + return "FAIL"; + } + + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/file.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/file.wsdl new file mode 100644 index 000000000..7c4aeb189 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/file.wsdl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/jbi.xml new file mode 100644 index 000000000..080b46a24 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/recovery/jbi.xml @@ -0,0 +1,9 @@ +#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/test/jbi/integration/testcases/throttling/TestThrottling.java b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/TestThrottling.java new file mode 100644 index 000000000..165f131d5 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/TestThrottling.java @@ -0,0 +1,343 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/** + * + */ +package test.jbi.integration.testcases.throttling; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileWriter; +import java.io.FilenameFilter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Serializable; + +import javax.jbi.component.ComponentContext; +import javax.jbi.messaging.ExchangeStatus; +import javax.jbi.messaging.InOnly; +import javax.xml.namespace.QName; + +import org.w3c.dom.Text; + +import test.jbi.integration.test.framework.Configuration; +import test.jbi.integration.test.framework.IntegrationTestCase; +import test.jbi.integration.test.framework.SAAssembler; +import test.jbi.integration.test.framework.SAAssembler.Throttling; +import test.jbi.integration.test.framework.impl.FileBCSUAssembler; +import test.jbi.integration.testbc.core.Command; +import test.jbi.integration.testbc.impl.JbiHelper; +import test.jbi.integration.testcases.Helper; + +/** + * @author Sun Microsystems + * + */ +public class TestThrottling extends IntegrationTestCase { + + /** + * + */ + private static final long serialVersionUID = 1L; + + /** + * service assembly name + */ + private static final String SA_NAME = "FILEBC-TEST_THROTTLING-SA"; + /** + * consuming end-point + */ + private static final String CONSUMER_EP = "filePort"; + /** + * consuming end-point service name + */ + private static final QName FILE_SERVICE = new QName( + "http://j2ee.netbeans.org/wsdl/file", "fileService"); + + /** + * provider end-point service name + */ + private static final QName PROVIDER_SERVICE = new QName( + "urn:FILEBC-TEST_THROTTLING-SA", "testService"); + + /** + * provider end-point + */ + private static final String PROVIDER_EP = "providerEP"; + + private File mInputDir; + + + + + /** + * Test Serial Processing i.e Concurrency = 1. + * + * @throws Throwable + */ + public void testSerialProcessing() throws Throwable { + + // drain all messages that might have remained from previous tests. + drainTestSEDeliveryChannel(); + + String workArea = Configuration.getWorkingDir() + File.separator + "testSeq"; + mInputDir = new File(workArea); + + // Create TestSU + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU("FILE-BC-SU-SerialProcessingTest", + "FILE-BC-SU-SerialProcessingTest", "file1.wsdl", workArea, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, FILE_SERVICE, CONSUMER_EP, + PROVIDER_SERVICE, PROVIDER_EP, null, new Throttling(1)); +// String zipTestSU = createTestSU("file1.wsdl", new Throttling(1)); + String saName = null; + try { + + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + // write 2 input files + Helper.writeInputFiles(workArea, 2); + + File[] inputfiles = mInputDir.listFiles(new FilenameFilter(){ + public boolean accept(File dir, String name) { + if(name.startsWith("test.xml")){ + return true; + } + return false; + } + }); + + assertEquals(2, inputfiles.length); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(3000); // wait some time before SU start sending + // messages + + // Get the messages waiting in TEST SE delivery channel so far + ReceiveMsgCommand receviceMsgCommand = new ReceiveMsgCommand(); + int i = 0; + String str = (String) getConnection().execute(receviceMsgCommand); + while ( !"FAIL".equals(str) ) { + System.out.println(str); + str = (String) getConnection().execute(receviceMsgCommand); + i++; + } + + // we should not have looped more than once, since messages should have been + // sent serially i.e. next message is sent only after getting reply for the + // first one. + assertEquals(1, i); + + // After getting first reply, file bc should have sent another message + // So TEST SE should have one more message waiting it its delivery channel + i = 0; + str = (String) getConnection().execute(receviceMsgCommand); + if( "FAIL".equals(str) ){ + // if there are no more messages yet in Test SE, + // let the file bc thread run to send the next message + try{ + Thread.sleep(3000); + } catch(InterruptedException ie){ + + } + // now check for message again + str = (String) getConnection().execute(receviceMsgCommand); + } + + while ( !"FAIL".equals(str) ) { + System.out.println(str); + str = (String) getConnection().execute(receviceMsgCommand); + i++; + } + assertEquals(1, i); + + } finally { + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + /** + * Test throttling in file-bc + * + * @throws Throwable + */ + public void testConcurrencyGreaterThanOne() throws Throwable { + + // drain all messages that might have remained from previous tests. + drainTestSEDeliveryChannel(); + + String workArea = Configuration.getWorkingDir() + File.separator + "testConc"; + mInputDir = new File(workArea); + + // Create TestSU + FileBCSUAssembler su = Helper.createTestSU("FILE-BC-SU-ThrottlingTest", + "FILE-BC-SU-ThrottlingTest", "file2.wsdl", workArea, this.getClass()); + String testSAPath = Helper.createTestSA(su, SA_NAME, FILE_SERVICE, CONSUMER_EP, + PROVIDER_SERVICE, PROVIDER_EP, null, new Throttling(6)); +// String zipTestSU = createTestSU("file2.wsdl", new Throttling(6)); + String saName = null; + try { + + // activate endpoint + ActivateDeactivateEP activateDeactivateEPCmd = new ActivateDeactivateEP(); + activateDeactivateEPCmd.activate = true; + getConnection().execute(activateDeactivateEPCmd); + + // write input files + Helper.writeInputFiles(workArea, 4); + + File[] inputfiles = mInputDir.listFiles(new FilenameFilter(){ + public boolean accept(File dir, String name) { + if(name.startsWith("test.xml")){ + return true; + } + return false; + } + }); + + assertEquals(4, inputfiles.length); + + // Now deploy and start SA + saName = getInstaller().deployServiceAssembly(testSAPath); + getInstaller().startServiceAssembly(saName); + Thread.sleep(3000); // wait some time before SU start sending + // messages + + // Get the messages waiting in TEST SE delivery channel so far + ReceiveMsgCommand receviceMsgCommand = new ReceiveMsgCommand(); + int i = 0; + String str = (String) getConnection().execute(receviceMsgCommand); + while ( !"FAIL".equals(str) ) { + System.out.println(str); + str = (String) getConnection().execute(receviceMsgCommand); + i++; + } + + // We should have more than one message since concurrency is > 1 + boolean success = false; + if( i > 1 ){ + success = true; + } + + assertTrue(" i= " + i, success); + + } catch(Exception e){ + e.printStackTrace(); + } + finally { + + // Un-deploy SA + getInstaller().undeployServiceAssembly(SA_NAME); + } + } + + private void drainTestSEDeliveryChannel() throws Throwable{ + // Get the messages waiting in TEST SE delivery channel so far + ReceiveMsgCommand receviceMsgCommand = new ReceiveMsgCommand(); + String str = (String) getConnection().execute(receviceMsgCommand); + while ( !"FAIL".equals(str) ) { + str = (String) getConnection().execute(receviceMsgCommand); + } + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + // Make sure that SA is undeployed + try { + System.out.println("setup: undeploy service assembly"); + getInstaller().undeployServiceAssembly(SA_NAME); + System.out.println("setup: undeploy service assembly - DONE"); + } catch (Throwable t) { + } + + + } + + @Override + protected void tearDown() throws Exception { + super.tearDown(); + } + + /** + * @param fileResource + * @return + */ + private StringBuilder getResourceContents(String fileResource) { + + StringBuilder sb = new StringBuilder(); + + try { + + InputStream ins = new FileInputStream(fileResource); + + BufferedReader br = new BufferedReader(new InputStreamReader(ins)); + + while (true) { + String line = br.readLine(); + if (line == null) + break; + sb.append(line + "${symbol_escape}n"); + + } + + br.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + return sb; + } + + public static class ActivateDeactivateEP implements Command { + private static final long serialVersionUID = 1L; + public boolean activate; + + public Serializable execute(ComponentContext context) throws Exception { + if (activate) { + JbiHelper.activateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } else { + JbiHelper.deactivateEndpoint(context, PROVIDER_SERVICE, + PROVIDER_EP); + } + return "SUCCESS"; + } + } + + public static class ReceiveMsgCommand implements Command { + + private static final long serialVersionUID = 1L; + + public Serializable execute(ComponentContext context) throws Exception { + InOnly ex = (InOnly) JbiHelper.getNextMessage(PROVIDER_SERVICE, + PROVIDER_EP); + Object[] results = null; + if (ex != null && ex.getStatus() != ExchangeStatus.ERROR) { + // ex.setStatus(ExchangeStatus.DONE); + if (ex.getStatus() != ExchangeStatus.DONE) { + results = JbiHelper.unwrapFromJBISource(ex.getInMessage() + .getContent()); +// ex.setOutMessage(ex.getInMessage()); + ex.setStatus(ExchangeStatus.DONE); + context.getDeliveryChannel().send(ex); + } + } + if (results != null && results.length > 0) { + return ((Text) results[0]).getTextContent(); + } + return "FAIL"; + } + + } + +} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file1.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file1.wsdl new file mode 100644 index 000000000..4266fc4f6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file1.wsdl @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file2.wsdl b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file2.wsdl new file mode 100644 index 000000000..4266fc4f6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/file2.wsdl @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/jbi.xml new file mode 100644 index 000000000..080b46a24 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/jbiadapter/test/test/jbi/integration/testcases/throttling/jbi.xml @@ -0,0 +1,9 @@ +#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/nbactions.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/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/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/packaging/nbactions.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/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/packaging/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/packaging/pom.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/pom.xml new file mode 100644 index 000000000..13e3dfa5c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/pom.xml @@ -0,0 +1,166 @@ + + + + package-common + open-jbi-components + 1.1 + ../../build-common/package-common + + 4.0.0 + open-jbi-components + ${componentName}-installer + sun-file-binding + ${version} + file packaging description + + + + META-INF + src + true + + *.xml + *.xsd + + + + + + maven-dependency-plugin + + + ${project.artifactId}-fetch-deps + generate-sources + + copy-dependencies + + + ${project.build.outputDirectory}/lib + true + true + + + + + + maven-surefire-plugin + + true + + + + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + org.apache.felix + maven-bundle-plugin + + + bundle-manifest + process-classes + + manifest + + + + + + sun-${componentName}-binding + ${componentName} Component + ${componentName} Component + ${OSGI_VERSION} + <_removeheaders>${OSGI_MANIFEST_REMOVE_HEADERS}, Export-Package + *;-noimport:=true + lib/wsdl4j.jar, + lib/${componentName}-jbiadapter.jar, + lib/resolver.jar, + lib/componentsl.jar, + lib/common-util.jar, + lib/qos.jar + javax.xml.namespace, + !xmlbean, + !javax.servlet.*, + *;-nouses:=true + + + + + + + + open-jbi-components + componentsl + true + + + open-jbi-components + ${componentName}-jbiadapter + ${version} + true + + + open-jbi-components + resolver + true + + + open-jbi-components + wsdl4j + true + + + open-jbi-components + qos + true + + + open-jbi-components + common-util + true + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xml new file mode 100644 index 000000000..67fba5d0b --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xml @@ -0,0 +1,17 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + + + + 10 + 5 + + \ No newline at end of file diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xsd b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xsd new file mode 100644 index 000000000..88976e319 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/componentConfiguration.xsd @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml new file mode 100644 index 000000000..2ef30eb74 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml @@ -0,0 +1,45 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + + + + + + + ${componentName} + Description of binding component : ${componentName} + + + net.openesb.component.${componentName}.JMXBindingRuntime + + + lib/${componentName}-jbiadapter.jar + + lib/wsdl4j-1.6.2.jar + + + net.openesb.component.${componentName}.JMXBindingInstaller + + + lib/${componentName}-jbiadapter.jar + + lib/wsdl4j-1.6.2.jar + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/pom.xml b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/pom.xml new file mode 100644 index 000000000..2cf1da1ce --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/pom.xml @@ -0,0 +1,49 @@ + + + + ojc-common + open-jbi-components + 1.1 + ../build-common/ojc-common + + 4.0.0 + ${groupId} + ${artifactId} + pom + ${artifactId}-top + ${version} + Top-level Build for ${artifactId}-top + + install + + + + jbiadapter + packaging + + diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/smvn.bat b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/smvn.bat new file mode 100644 index 000000000..054886d8e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/main/resources/archetype-resources/smvn.bat @@ -0,0 +1,6 @@ +@echo off +set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_38 +set path=%path%;C:\Program Files (x86)\Java\jdk1.6.0_38\bin +set JV_SRCROOT=D:\codes\logicoyOpenESB\openesb-components +set JV_GFBASE=D:\softwares\openesb_logicoy_last_working57\glassfish +mvn -Dmaven.test.skip=true -Dmaven.repo.local=C:\Users\logicoyparam\m2\repository %* \ No newline at end of file diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/archetype.properties b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/archetype.properties new file mode 100644 index 000000000..e426b26f5 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/archetype.properties @@ -0,0 +1,6 @@ +#Mon Aug 05 12:10:08 IST 2013 +package=it.pkg +version=0.1-SNAPSHOT +groupId=archetype.it +artifactId=bindingComponentArchtype +componentName=${artifactId} diff --git a/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/goal.txt b/maven-ojc-archeType-v2/maven-archetype-binding-component-v2/src/test/resources/projects/basic/goal.txt new file mode 100644 index 000000000..e69de29bb diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/pom.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/pom.xml new file mode 100644 index 000000000..01bf37d75 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/pom.xml @@ -0,0 +1,43 @@ + + + + + + 4.0.0 + + open-jbi-components + ServiceEngine-Plugin-archetype + 2.3.0 + jar + + ServiceEngine-Plugin-archetype + + + + + org.apache.maven.archetype + archetype-packaging + 2.2 + + + + + + + maven-archetype-plugin + 2.2 + + + + + + Maven project Archtype for OpenESB Service Engine Netbeans Plugin + + http://open-esb.org + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml new file mode 100644 index 000000000..6cc5f030d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -0,0 +1,62 @@ + + + + + + + + + nbproject + + **/*.xml + **/*.properties + + + + src + + **/*.html + **/*.java + **/*.xml + **/*.properties + + + + test + + **/*.html + **/*.java + **/*.xml + **/*.properties + + + + src + + **/*.xsl + **/*.form + **/*.wsdl + **/*.png + **/*.AntBasedProjectType + **/*.CollocationQueryImplementation + **/*.* + + + + + + build.xml + **/*.mf + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build.xml new file mode 100644 index 000000000..16590a783 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build.xml @@ -0,0 +1,8 @@ + + + + + + Builds, tests, and runs the project ${artifactId}. + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType new file mode 100644 index 000000000..b05c8de7e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType @@ -0,0 +1 @@ +sedeployplugin.project.SEPluginProjectType diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation new file mode 100644 index 000000000..9be0d09e9 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation @@ -0,0 +1 @@ +org.netbeans.modules.compapp.projects.base.queries.SameDriveCollocationQuery diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/Bundle.properties new file mode 100644 index 000000000..f4399b22c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/Bundle.properties @@ -0,0 +1,15 @@ +# binding component deployment plugin resource bundle +# binding deploy plugin +OpenIDE-Module-Name=SEDeployPlugin +# deployment plugin +OpenIDE-Module-Short-Description=Service engine deployment plugin for ServiceEngine +# deployment plugin for adding wsdl extensions related to the binding component to the wsdl editor +OpenIDE-Module-Long-Description=Deployment plugin for creating service units related to this service engine in composite application +# category +OpenIDE-Module-Display-Category=CAPS + +# plugin project template +Templates/Project/SOA/ServiceEngineJBIModule.xml=ServiceEngine JBI Module + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/layer.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/layer.xml new file mode 100644 index 000000000..758a0eba4 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/layer.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/Bundle.properties new file mode 100644 index 000000000..7b3c45fe3 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/Bundle.properties @@ -0,0 +1,4 @@ +LBL_Node_Sources=Sources + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$1.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$1.class new file mode 100644 index 0000000000000000000000000000000000000000..5b56f7a17a5ed7ef58b20d42771f0f66b14a2a28 GIT binary patch literal 1684 zcmb7FZFd?)6n+MfO<-#%Nn;Rlb$kN&56yhBMPi60^yX6HV0@8!8~vw!{l+wTD0#QkZ^U@3zfmNQty z8yT#?nZoK6*0OYbJ&PMyH_KaDyp4Cv@~(xAENtAI!ls4yEZnm2K0{h}WmH&YC{`oU z7J=sv0x#}JT_?*m3&TU8n8$oQfxULYd=)@)+ii9o8v=s*KF(xrXNMS2Z4t_*%Ga zq0EqJ_;KipU1{Q)JCV8-!+{b|QLg7lQgv!Vcm1}79UB$w+Q?(p#vDGdaR+-AKD6-> zstoI0t%D86>G%69O6Zp0Dq1m|RpcDDWY2HMo`{@=2p>pSR1{TDIBOK2;yppkY}8OE zdN%H2-^R!I#6rVH6Q9~Rz-J7($pkdTLv7<8b}4&XTU*o_XKRcC{bTNAmMwhF@Un65 z2SUlVaAGYzrxt7Ru(0iF=~H>qN1NG69^*n#8Yj`C3NTzd8!ZN_BXpfIak38@I;0wy zCMlZs%y8Eg5zWFXO#?rBXO9}>s4Pwt$Y+xi#X;bQ+Tlt&+e(iI=#KCL5z^nTo4EeB zA;U$AXFrrZ9uCUB`cih{kefvAjJkQDcz^L&&;Hxc^JF-dqT7Qe@0hIA8w{JpiSZbx zM;S`w`X4Pw9-QnoHmnN(3YQ9nyc5!o5m9vS3ee&qBe% hYh-YZpafn=k)A1f#guT7c6q{P=xILZv4!pQ^gmEUwoX2(UnD)M7 zmWzg^IIg|RHD4)Y*8;&>Z7pnO4a@N77_PKzbo}Vy4Ti{~trM`WoMG{NxwOUIb#==O zpxT;hZm6yy)^%Y-KxF`fylh$AT{KnC<0MJ72t6@Q;KOd&V(3i{AAz*GB_gHGcAcyG zbweko{W;q$DwPRM(e09wC!jgQ6FO1BX4YirYtqP?yu>Y`5Ybg%We8cM(^>FU?beFw z1Th48nU}D}5G&YaSL0U=5pM6lI35*=B3`nVX4)PlYK8kdwl3j@j2BUmF^ETGJd6Pu zLs*yb5;i2!xDwWEp#r-X=THdIL#qyNhEu&=XWs`eKfxCN##$GTy+O45yD0Q4dqbTTo?eL6f0_OW2lC#EuLDyE1OUlu;6U z7Hlf5)+#G8&d_~WqP3(*a2U=A1h&I1L+47_H%w)v?DN}+dCfO$%4W1N={*Xyku!#K ztpQ+=JnrX%X6Z{FsgHWMh>{H_#TZjHjeFELW7Iin%Uv)WR7@i&isu;rbeUIn9NYC3 z)$)~j%da=vHEufGrJ9-y5?Ie>%Z3a?MNYnqlIrd++SayFEW4`UY$+(wf#hZlQlrcd zi@2W*>nm?ze_bsKTJi;k*%OF4fvTq7Xk>x{=^(#3ZWaBVfXij7JHzKC>Zas!GZtY) z2AyQExMP^QSW{mPQ0JbMWm1j1ykzh3K%0`DJf=5u+?33^>4en^T_{VoRu(;c{E)^D zX*ZQvLr%S_xm@+>UI=ahLDbCuAnK5R*|0qB`U`y9cIk$gIw6=A!#h<&w$5++g2I59 z!!B!-c9S!qEBI6$>N&m6=a5tWk5U?J2G|H>Q*=xJ$?c0L=+)Op*Lgoe-QD6k1L#S2 z8@(Pw^dG{bw0nkTmuVfQXICnH4=k0rhfwM#guf3IAEPl!iom;goJKjAcai(Ev|>o$ z>6#mM0}-^5>>%|6*w2VWeneX?-4pGRs%Q^mB~wKQ738;=%!I3mh435V`H?DQhUv&) zB-s51eItXB+IAJ4A>6$C;E%gFpRVE*y<-DkU18+YBP1cihGusdH-(6l==4w(4~0-g z582njqzTPw_8q|sLxgk*oix5j;e0^ce26FU5isaw{!^5hFHHO7Q zo`*(NdL+yYGkdR%u5E?^48gXPLT}~V7(teJ&gQ~RYR}P?BpKQK{*2Q;wV^btK zmud2HXopFiADeb7DW`O-&j(2jrJ}5NfFX>!e-4JvY)$P&glzo#W-*-8BF#)Gbnh(* z$@5*MN*aY5ZFdJ)q1|rMoIEr-9ZL~Fn)ssqZ_pp$6uq9N(?hyDq}%cBBe3|+5gPF) zIPWKpZITuS_<|0}U~+C_5leKVBCuS;JRlhB*NQ)&;e3R94B$^PexoYB&w#XQ5C`We Wtbq%-NZQ3ET*g^C`2@E>n!aDxLHY6k literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$AntArtifactProviderImpl.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$AntArtifactProviderImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..8591c3f34a7a3276e915afd272f3b869bd6a09f5 GIT binary patch literal 2057 zcma)7TT|0O6#h1ari7@q;Qfa8wn$UFOBF=~L93uuXBZ!xZL`)eA;~0LMtyh2Cx3|# zI-}ra^auE(9M96A)q;~gba&70Ip;gycXspR=a=sQPNQaE0KqkLP0gUiRAYpE{6 z2fXf*C0F$u+Ngp>&?|h9m^bjxEC3rNCt{XFX4ZlP-@UK?koT z#D8p)fK=D^rjXZLj%%+cq_89T!sDtRHZ4!cy5L@9@xb}b4fmwg5wD`-Is+IUCMG5+ z>d}g#P>vDdb=CR| z<-b^nHdlVVHHo-{Fi68xUTJzFnFCS58x0ZBWi3+^@WdTf_`7{Oi-=l5;D^$R+c>`A zGr|o-sO~ur0^!-}5>)?i)7G|9=rYA}ljFHfY5QMBhW*q8HOW1jhcGquia?UUy)#+t{+8 z>W;_QZqVrz`J{`(t6&>fHq<^5SEi~yK|HBy(>RGdMbJ=K%Ui@D8gsNBps)KunjNJz G{eA((!cg4+ literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$Info.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$Info.class new file mode 100644 index 0000000000000000000000000000000000000000..a40593d301ed36f1b6b7998af8cc21323d9a22ba GIT binary patch literal 1701 zcma)7T~E_s6n@@)u&t{wC!i=Q!i2F2o!}ROpqUy;79^P=@v_@qMoHH;ZHMx&G!ZnK z_yhbIMiWiE@WKl()Og;mY-0}D#oC_pp65B|Jm<9g@aOG&0CTt-LmV>_WXwjONC+Y) zJXgijoP>E?6PN44ydf?(Be)g8LIk%Nf>zmK7%yzAJE~IRs^KW>wrO$O-OX>QMwJ)q zmSx)RB150Mr8%h_L%QJb3b%A~*V5}%%}^}c+~#FhDLz>D9K;}OfmzZF&0S{5_6(Zd zUS3TGH7Xa--a*Gk-eqLy^>BnxI))i+dI6SnURiNXl9YHXSe@~UBQJFlyb!^u0- zW3efLrizoBn#~VOz%Z0<2&9uDO3}47qq^wTNu67wDo?)lQ-(;DyK8EViXKc)cMIsJ zfcu(b>FRDHP9RpxrqMz?SDa^*OA%hGO`-r_TZR;|ns!w&xZ9YUYH7_$v?eg3Rw{?v zDQJ$%Ng{?xzpZX_KZx@BjOtCy#L=tLgfNWSyk_on=y-5WjTFtgUFHupG1I}0wV4%S z%1Gd(j3lV-vE!Cg#4X9_$AFA;xD&y$jEfkPv4RO1lbDi`!4xfFZ+q*l0z;xT)W;>U z&qQ#X;9`mFn(As|iovwlkwd%FAo4U_=(1C7YvM=#>k*ujy){BYtK~9xoYZ_Sha7zq zWH6jSfb=4P0a&^$(c*1XRe&%8o7%h*2pT2zvk@Czh-^=O7YJKm&; z<2)`95fg*;3FkbUiYG#1i@cz8jl%lq1o+lgP}FB)xYRTLdsqB8Cj9)fe*VxKL_2f; zXv2n@xl_38V-+787PWVRf3|_cO)%}T557ljiuuGmCHE2Q)bSS$^tVUS&@tB3F@`jz kz1;Lh96={_(2;yqm0>OlYg2R^$G^V8K_u5`;fsj;v(C|e4 z+s>p8lg{)3`V@VVws(y%4)shu1rO5t?%jLNy?gF@|M=_8?*KkV5XT@Ms2IXb93z-j z@ep${+-RoprE3NP5IbTu&v-T z1to^4UpKtel!DJ02De>%UsU`pM_8h|YTE~EhmOghtyz|EmrU+?!edw{c%mvC(>`|0 zpk`RQbGl3~<+q!LFifgrxEx{58z9Bpc zFi;K*vwCh~xYB}pYM6pt`b$2q92B|J%)GhdyQCS?0fSny1GgfiC-J|qZ4)vXg2-DH z)AkIjRuq2Su4;IWFEk9}riM{DdVwz$e5K)Qe8Z5k%1)>P$2E?)FDRMjdxGpCaRuLM z_zvHbqM8Mxx|~wzKdZt-;0ad&*HA`czkp zFH?&ZDF|wav%&mj@EKIi*SSw_o*Git4%ytLx zZ%nDM;H@fdb_&(i4s|G^6zkYqi+S5|8VaGvEnX8YDUXt07JED}sW-E9e0RB$G}Pzu zBY6}{VKID^{?Da3No`mHob`X+b#1rBWTw^~I#vE3#jwB+K4G1+(@Y6`J2e`#%kYTf! zV>zs_1+24qY_Lao#vV60XNcDZ-G;`Hrq#qSWS_t?#*u0ApGFpUsRH+Ceh58(6I4XO wgaTc`B$xua7e(kIChK;ess)NUf@!=*qZ>3cLKm_d#BPwj%fIV*hMj2qAFsdGhX4Qo literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectOpenedHookImpl.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectOpenedHookImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..0ccd4db4b87deea24a9eeccdff1626f0784ed9ff GIT binary patch literal 2636 zcmbVOYg5}s6g>;ZvW0jQ2Zun?Jn9e|19D2*LP=?W@M>)!m=HoAscbJsAS6|if%KpB z7vythT9;{OI{nlS{T=-oolft{GGK6KJhjJ?wc2~{IrrSVyMO)r>+b+Q#1Byn;*pFY zd?cd-A4l+sgvkh|WPFNg8ISQ<1TztQF5!ucS|CU@oy&2_oU z0EV!)r@M&^Lo(~~61NTOwQW?&x~bYV7ixZC-5&^CPLs`J-PFAqhIGqDsV#=kyj9{1 zJz3r4tChn7cQ&tKQJ{<1)f!zilt|4Jt!AtB&_)5Xo_=X|s2dVjwT{0U#aVcu7Nm39*Q*VN+>JX!+`<=hYVA#xojem1XFppXC^*8g zfPTX8xHbRHAv26wPFXd%SKylIs;;e{by-DMuT(G1r?yDj_9IBvzZ zEyq(e(^Hpdad0$`mqfw2%iOTJL$%uDD`;qDS@l;6hR!ngHi8;qxR`~XM3yxzs zInC6{qJw2(@s#gs6@%Q}Os4!KHJeKC!=~lwyRR8;Bv&r5-Q07mW3fn0i$&x?14r$G znt_yOp*s#M9;fmdycD(K>4usU?pkB;m26dwkX}CkaF>JX;j& z9m7PjAra?BiQ0_1w!YkJ1+lFV*eE44OZ!U2W*BP5s`ip*UcUmVZWlHJ2lp>(>(^ZK zpxt|#JLgyj+@w9^fOZF3%t`Yn4LXRf@+-K$F4jw)TC8Tg!FRdCP3o+Cts97ryJsEG z8r-4MNC$Mz`t;q(61`4WJK}-f48)`XOcPUIr-6%%8>{Npm3;XH5~zU;ohOFqXu*1W z#a=-F+Ua)}_h>W!fc{OQjlO_9lKvTNUC^sy;0-zjAA)(K22dskb%1d?kb&hOvvqW_Rdlm8^s{F^m^gXrhI9rd o9)J-LB(&uS0^R6zD1@27ExHd9{y}ni6MclZ_R;C!w;zuF2UB3=1ONa4 literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectXmlSavedHookImpl.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$ProjectXmlSavedHookImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..a7914dddf76bd19926e029b9fde26a52c21db7fa GIT binary patch literal 1247 zcmbVMZBG+H5Pr5TTzfqzw7mK*R&0yyA!35T5F-I0X_Qb!!xwYCu4VChce%Y1{8=W7 z#t;4gf0S|d+JX>BE`GS|&a*r7%sexDzyJLF1z-tJGRWeV4g{IMlCOKV{wB7L?24mZGd9dzSQgXWZJZApID*{qoxqit5E{0@DC9ZEA+uRR@=SmF^$!>Vv zz~-AmB|mXNpW2~yWEmL2sDT`24OCHMm~or^;AXQcoK{s(4YlJA)iEDWcZv~k84=5K zF{GoxG_Z(A8kP(^#xg@DBI(61TyU!$OJZG%$9k1o3@cvHHeDVzx#dbz`r>q8WY_n- zAT%vEG%pdGp`au(g=cQRK2?@fwQQS9SzKPEY2@)Is~#(nmz;*h3VBO)O>S|==YeW@ zl!{}yZ8MrAhHRUMyM3V<=1TRm8;vj!ZhN)dgQ#}%?QWfdJpJzsX!ZmCks5UHLQO@( z4ul^v6fa>tPr6^;r;caoodaxaOpP1u67=OT28MCkt&pt{y|VBPtnwX+FVUU6!qf@N zAj5PN$TrAFp%a*(hU{m16k^O`BRf7m4Qe*x$xSj+$b literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$RecommendedTemplatesImpl.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject$RecommendedTemplatesImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..3144fd41603e8fc1ba263c0dc02a277155bdbec5 GIT binary patch literal 1387 zcmbtUTTc^F5dKcP?Jl)kT%aI$ivkvu-GWzyXb4o(WPyeyNW+8Kw#Tw$FU{_jOZ-z_ z9!yO12l%6mb8IaIs%c^$X6DSych1awv;Fb&>vsT)c%DK(vMCH8+eg-{5OXr_D|nz_ zUV)}SSCCV%pkPtPBN>lnJdyE~A+b{`=1qp-edEwNvUJDtYPuN(wpUwb7%FZTb_+)S zb$Os?3T9lcaAq&2_F83qm85kq#4o$&*Q>`Uql)1G^a&N<+ z@rE{yna{tYD`^Nf+SAu5tnazbx?gD!F_CuS5*w43;%4Q5yOwqmRvE_5N8gz1hISlQ z2{(Nf*@_N$AZV-eAhLO=otZM07+(G-!RK1uDvRY{$oWA{_jpw1mKW+_-EQwq!`3@@ z;m`6h=>LLrSqO$~kCiVl%=DIu9DTS0h+z;zBqs!~^np(ZYDp)^M|9H`X6U4orj&Q|HxqCT*Xcxb<0eS~)<_Gm^a=3~q&u<49ayQ2z10mXUBte> zj2!|MeW&&A66qMdCyHj>i_SC?S`Uk^?_!Ez3Z~n=Z$hF==&vvN4T(}*O`0W1mCaH@ zRm{(b%S~^e@TP?KidjmkX$nc=P1;)D}(%dI-o6hw6 E1#N3k1^@s6 literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProject.class new file mode 100644 index 0000000000000000000000000000000000000000..b15addf38c56017111b18c5b0915dfebdcaf7555 GIT binary patch literal 9282 zcmc&)33yc175;CwH+eiH86XG-L=6y437KoxQb?cR?c}s!RJ(b z9$!%KMIUZbu^3>Zz2G5;%R25sr_J8nK8G*=ulyo;FhU%(*1I+z6)!6GqI4?1;y&u*c^) zq}C%Y zVyT@d6`n~5%(q}Dbc~xA$fV6^px=5WCv}=JGkw0mdClIKmFRH!#R645@rWTXtKW4PQ>r@236M2tiC&vYraf+#%L-a)jl{R4V~n*B)7FI za7GbPq3Y++i1V`27kUm-5F;Y6@s#(X_mB}wcUW6tS{}5*qjH<1!%^&NLn3%K-n zVaAX)T2_%)@*VfUGSd8H8HWwV>~z*o8f?hmK|QGt(UsEU4roU?6=Xq+rZwGV7oH zC-AdrB1&NtD0Jw`RD#iV#q{C^Geh(W87OEk)``mHs(P5(Nj0rpxl%y)927koX0f}G zVZ|63Wx1}AT(gm|=y=V}Su5ul&$VRJoLaulaMU@HDx0NisP@K6W2dA=XG6Qp3N%D9 zsv!bH!!SlPByg98x8Md12Vp8g)5J`1n!s95NkUOj(8MeWln`|qF2@!0GEXSwRwo6! zQp0<2n}!(Tny43kCR%a{ZkLx{%4AERu4u9QH8ESv(QqxUlfAhD;xY|a;~GUYXks3& z5ttjxT3GfpZ66zrYT|S;U&D*>5`oqN@!cLso0O(04}|2X6&Dn-fRc(cNagLQwoVgG zG~z~q84)wZWN=)DKt(Ln#3FGf4}Fh7tE9>oE8;9ooGq467sXog4z*fBE!D&_u|&fg zaDza7)76X!?GZD1ZJ@<6A%VuGtB0iG+rxHZn|*6NYNA;zrzz&?7)!DQ5=O(#qD5eJ zfpVuyLkl966t0!|g*UxW5&hl$2X-;tI^e)4qD>PkM7t&ef__?Q?e{9N+Pi|*NEy~> zVy#%GiS>B9Ce9Tb3RG@qH=5We&Z8T76SXTWv#xBQlPnl}HhQD&kB^u#Z#0d=Zh%gK zo@oHWnN&JHYF=d|14UlblY8Ta+9YuPG*CtKO$?#s3L&{7=FMJF9PcVEc{)9c;Q$O4 z)l!>1l22Eq$z^O7Sm_Oh-0jplrQudu3U0FtTwh$4D4u~qa+3AYI>F7T}~fs18e!IbITFMlNVn@r$YJ2C0E!iyOX z^bO_;27z^_h?mV+8tpWrdzoTCg>Gf^NaeX+^pGx+LXxPFO0n zV7^nsl~#rM`QB29{0gn=hy?)mZnvI3$W+w0GNVVC3>Q=aS9X=)MQo>b>_bDkh-GD^yqoM9RzRL<#xE-jZp)G+HT${h0TN>wX?E4@i;G2 zcDf;*>7|&~NI~gUIwA`pKiTXZPZ$w5i_5&TaMu_er7TKEB+~=lU8*3$xQ{gVCOJu~ zv$2vxT_T=J?~{(Vhq2K}QE&6yi`tWk#pLCo<)Jg3Yl`fZg5#s5g|$H7M5k;ifjnVt z@E$#U(8yi=(S@x_{UpbBc_M<|@*FGhSvp5iRck5p=^}qDb1Hbefqs@km4?UZbBi)N zHvMF`#g$w6P0#nr%L#RncT4e>tT(N)wwXE3Da}8#Bx2eh5}c0)%w4L7%`tgT-QMgz zyRu14>B*h@+OVJm`XYXfFy$pNZ_cA}J<=x&26JMCupci#4Hn3IBYt|UkXJ`m%R3{h{TB@P3r`dftD%wLalA=*G@t`f*BmpLamdSc?6=R zrEL6|Yw<|&cPVQ5yBSrKvKC$ZOxcYFe)e02t^6$5i%x9g=ys$zYq8B8 z864sh<*-)4j0xms))Z*?rnU-&unO%LVaiwe*f$V%%K=_C(z)Z z$NmIPzlZNDASJ4?=I*pOYBrt2QOL_E2Xi%BiRo*30F@J%UrayfqW9(Kc`4=42ORop z($6X;4!Ve|bHp#j%N*kCD5~6uWz_Wo{}~f#ycG+%poO!sXaZ+Gip2wM{<9`DQU>a`^oqBV}Aj{@i}P2{$@o^l@9H4(lzX<)Icj z4Y#v(UtXuGHQ{>H@kUkpg00v3oL=j36W&a?3V9Xmz!uqPZLwH)xWvlZXobAraOihH zVGmd&ZJhG7RUJcfsM5b8=yckH69^Qe-swVJ+Gg6=m(7!kSQ4-bt+OpN)0?^+$2;fPdw#))j3+OkhLn3jao{cb=v24ol&k6WBz5 zIzP{O5!VkKq0T2U9}l7t51|QDXvZ;Z!ef?1EjCwYopo4^ci^3rX+Hl<;$7U43Q{e_ zyV?Rka2~GAuBxbOl2-ZNZQ-g~igm zx`QF#6na7})&fa5iLJpT&)#$K#fQ z?4W%-XQ;=mP|a`Ccm(go?Wm~p;SRjd*~Sxwg7q#NsK)!{DL~>6;7*6Qk*)k!bss9E zK*ANz*K_6v@u4zoL|%3~aFt<0X+Mm+9O7nc+6#xJL literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectActionProvider$1.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectActionProvider$1.class new file mode 100644 index 0000000000000000000000000000000000000000..29d2122f2b881a5e98bce56821ddd7e4db66e621 GIT binary patch literal 2562 zcmbVOZBr9h6n+*$7Q&*4_*U_?X$t{dQLENiS`cVyllTHgP%CbdOIXY=24r zKtDU9Nb8Ir+nN5PPTT2oHwHJ_>G z^AwI_OviW%Z5T_T3%As0q7##tQqwO|_!84PzSfa%M9UNsMOJks%4$2S@}S1l)9mbIGYRy6eFmaSFGbS$@O&V;`0Rmu3ZskJ+vJ&C*?}rqh>N(vV-(R4Oer4s0h!I>z-4u+OFyOa#@r^b7t~RB)HR< zkCj7Px}2=in6E6{v|T$K)lli*pNZW8{G-1EMGc8tvLZAb%-OCe)N3W-&srsilAfF_ zTTapPZ8hH#CRBVHpuw1SUE$wytRN7ST;G?o=@CZU>epSi{mPpbm4nkw4i{u-FRo9B zpzPaTC>2I}sct)!DXAgdq`GK3B3KVXQ47o|j&GL~JUVqzc2+@vQ+Lfq@Wp9jgYOVU18nu{9@4$GTE|u2jF{72A(f=@AXx z@2+@*Atd`d(Y?CsHg3TAI81wUi}%2GSLKRm++z(F`gc>LiKFp)p%{OF^qP&6toVN{ z?9JPOJ$ag35$iL81?*7&Kx`jHBzo67E=4+tzh7cn(>5Ki#UYAHPmS@%bk;(AwRt>L0+KB{1q)6#2=}!v9&Eqt~AexGfU+TfQ$nynFyd+`DKInywJOv9EoMoVp!J$r+;`PWG1GB0WJB`v;0 z>)-|pK852LH+z$Om1y+-$q z#3l}%NNk|z!H-lL8r;NTjyemQIKnMQU(k)qSYfH`MJtrsU!jNXU9@ACklZH>MZOGk zT$`u+k1&GA+_8Wxo?;3mu2lFO2)2u~vrJ1%kg&1JnF@WBK+K^7gBW6{SzN?0F7PY~ z9VTb3D)=p6+9@63_nAt@6P|K~K!42jKD7Ud(>ku|xR&ht13fyfpZXn1K7*g=v~Ytu bEwp`;eS+U>pW-8qdMG=_Ui}Qll|#qhg-Ffk literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectActionProvider.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectActionProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..ec9f0fa1d6c4a69613b270cff914a4ea5b197188 GIT binary patch literal 3557 zcmbVPX;%|h7=DHXCWK)dm%7wets(>^)ml)Yw5V9HsFYYRTH6lEC5%jF;$(tayDxTM zKDPhC52Y2CdfL-(J*WK{{U1Gj?#vL9fak<=PVVyF_rA;XE_e9r-(P3_{LxG34Yt zAA>39D=HS^*aE8sdDwAYbK)rAY7A~1MR-z0NyR=Diz=?ExUK*Sv~k-O?g`5%7DZ7( zN3m2WIIbtMBN@+hY?3xynz&*t8cEBrbIFwFns#nbfm(2#DJqn3soP6G}v-Gn)aI@r@R`QHdkQ!2E&NjS~D-`rspAN0X zWF44>DWqx0v`ueV!4GuAW}CWu)Xrq=HUAqP}@!Msc12(9nmZ zg2q{i6gy6B$eHX}v*@XKTfW=g&P{) z#d|8=*YE*8BrWeO3Jo90brahP;nnalKH)AaEa7qYsXXhiuRm6Mx#ysC@s^6uG<=Rp z4PzKr@r8yjG0x89o7#6hZ>ji7!`Jvm!?*ZO!Qua-s|uzdaTM%(WM8f}l;K*%c-*o? z&ag(@Tq!SXuUrMJkkv>rN(v%{5^L^AWiEy(TTx*lrDrXP7>lbV!(u*fT1Q3?3ufq% z4wTH~%G+{M%o!zXj++lTPB8xEV+DJ=tGlgH@oufWcQUVQq?}>K zR7lxTtz*j1p^Ec?IblKD#mmPJtjII;*{Pmk3la5_)wHel=+X`A$4y-SUZ8Snrvg=j= z@aXL1x7RLy>nV5!jo2nT2tNQDWKZ#DHW+_qd+}#>Eb>0icA=SLf{J_5&Mvrzh8|^OP2nIe(74MqZud131E+TuC?i zZON5%w839VS0khz#j((_KF*RW`ZL;o;@kkKxyh#u_>#5YJd~_p5JTjWp!`EvB`7m` zd+%Lz{75hEK)a95C0(x~Y*^Aa1_VuVDEF~xN#9(>^2E|ZY)L12_us?Tvj-kvn*s?$ z#5ZS{?t^NZ@d7$9j82R&p2r#86O8XEy7w}n7^6|A$?*zKVgjQ$he_C&=EwIcKr>~4 zX2?10yEcOt@e*B{WXwk>HA1Npf@o()X9r~w9P*9wcZzxf*DrDx;Ymy4F1G)P#>nmH zZEgc|+x(*<#d$ROny-Fmz+P70QdZv*s+UR`o8~Hwd~T>of;~XZGEl7&!Mk`;-*FdD z)kf@QMZ{Xm5j#yt0<-5iH&Tc$Q?&O1o^HS&*m*3vHM%NE{#yh-pzXNjOFJCgC|jXY1LKBkKw2DFX^^ zp_4-Cpp2B!7HEK$O`L=j=!BN;UAp()rJI)izxSSG%a(&n^ZVuQ-rarQ{l9%DKl`7@ zp9HW*of5)%xH*Vh%CHp&f_RVgw+3;W^tVfMhcxdE;eB|2Iqt+=LEIh02g-2}_k_4| zuZ-@Kl@H3E4+U|*^bbh$U=R-l@o*52gzzXH({Lz=Q5hZ%;z$rjgLpiMV?lga7(Efh zlhQvG#7Ct6Xb30ZVNEbd{&yzh46WNA%rjDOCfw2 zUyE>tKhW^Q5Y7~h{7CvAOY;+H zej36V_*n=)$1j5Tr7-$c5Wkl1--Pg6{7y!{m*x)|{usia@MjIrD`+D<>EZTxTA{LQ z*w|x4<5sjYo-kV#g0j?YjF<{xcP(KghoZf9I-VTjx;E0==Pt{r-OLOqlyS7pNDrB| z!mMRRCS#`UxRuPb$1_HM!i*`X3l&OFiznmu1_ggz{RIkvHY>(Ms=DGyvpYM|Z>G1& zW;xaxFcKFS>9~A*lL32IJfpC>D`UpYRKnVyN@R!P$!IEV4VwdYw6~+jndou9&oYx{ z+OVxO5zitnZ<-==vz6YjFr%)1qUe=l8(j%!=k^q;pp5%+N+`>Wjpx)&R+vayn#sES zW;leRvvfQq8X^pbzF>;mUA2}w+jEL7cXsB!f|+b?xM(148n)S!j*l4W{cToqFg}!} z@Z{fa*oHz&U6+*}iY86F-!zh$XeJfU>n)Q_rL43aHIjC8V=||wv&}@xOt%X7vQ&E5 z{Zv^0GWpQhF$c*Uhr!;H2BI-*B-)WMN6e&66ZvBn-DqyXYP&U%^_EMM^v8~bLS9tI z=#+SmBe+GdcHE?Y_{@~Tsndhm5sTa6Ve}1;o=E29lekD=0?@YFbPeJAKnb#7Hy=I|x5WISd@2N}1S{TbUF$v82*wO;~)qLgLQ1D#eP zW-`nb)v}}zjxo*)yzn4VMXzlP?A~IeoVe5Q7llyAz5&y5S1Nc$ffgK$YbPk8etPiy zG08tAY&*AV_^ZOqv^khIGrJ@a^*RD^ZX$1bWJ%hx>`o1T)9`l!&QW=i`UWi~vC{?; zUa|@GTG{k~DNGd>PL(E_B@61-$_)>Ox)UbN zocH`(SDFgys!W9x7K|rwoPOL!rh7V3vtubgN17_vm98r22Ts`-mlqWxOCuRqbFP{) zj^ZOEc5`k-SCy)Ye%YUmCt@zs5@$>wqu9-vZ1ZJtI_kn@m*=-!!OY(7Bz(yQG!uQM z+}kYL&@l+98QxTZX@3Xgk3uNF`(luxJF@qVVMz? zNK`f3`%|W-=IFRW&DD{@r8-_M&3;^}sd>7pRyCSBL09wD0!=N{)gpDGt|Dr&u9m2! zbXi?3Q_FR{3)kyvg<8(ylq9!)7?7%KDQ^ZQL%j|BUrRr3@G!43H zq^_`2H8DnYwNfyLyNQf7Cz046F@#VEn!yade4`ynm_~*%LOu}*)J$X~%kO?OGGb+u zwi#Q@%~7>VQ>%5gMxCUqwQ3zl5_!==t>=r>R8gy`lXbOTAdPcJH~%rnURKRxniRU@ zCszhv&TMX8S$#YjW>nkUoZMq1;<0fyp6}c?rmET1br-sMbaJtrC5KIzrUuAv>t5b^ za&?mq!RyQTy}1>p`Ps$hc^Py4%`42^y$Y>G?leKc5Ztsim)pL zDSJs-ZlqY>Vr{$VrwSw+4_J7$7LqwrjN4R}cbKV^T2sg-cmKFh?l~2XIdU0NVat?A za~XTedsNYjMTLWGjDL3#{)Gj4s%u&i_9DP~(a_7lMqTq}+2a-mUW`vE25e&fp!O$C zF^iK?n>8YtTA{uOpPiGb9Oajqmu8IwuNMVZXzwOd&)l|VTEgXo=(FPvGn%x|d4c2> z+^bY^CoCe*^il|!OKr$MITS3{&yJr&S|{tmb?KM1VUY`CMD#P&d7=)cEH@T&H^Phl zFN{+imA`zhnqDgR4CCD0Yg~Zs=Ae;H@PUINN#@Hio7V$Y&T$k~2X`DBxxi6lv z8DV^U%UgV8H|sV(b=#5>mMfa2ZrW8?StNQV$GmrqAgY4>xxk&|;bZ%Qw&mVLrigha zv|v1wb5AJu6H1;fY%k{5d8AY9=QSLLY6$xd!QT)L970J$xbzUThaCp5WIGon zY?mT{We8z8W?%*9YVj)0>Mjdh0)t;luEievD0^XF((o994{_jwFe`N?8^#fr- z^2b(r$7%@TGF;9BeDWCdj(C=EDEK#YDrZTcRo0&~yl8VV{e$_7;RW zsyc$YmOw)dOGc8k|qfC0%|q9iD!cQ_){d;`GW$vNOpeCaYMkSQcgaA1ysy>4o^9Nieor+ zN4VuMTA$+NY5aeB*CW_)081L5!J=b0W5+R^x#KW4hBu9(jWq3}=s1kdr<_g88%J^0 zfx>-f7w&5u)8Y!05z7tK;EnW_n-Ip$Sbzicm0MW|Zo@gaof6;SXv)oqHs0#gq~#38 zYbm#Kq%B8af&T^6Yq+kqKw$nZ;R*a81@`l>_J%G(-261krRzHQ;`5D^aEmKp(*z06 zA#!fZNk|7jmvPc1!RfkznxNn?Ow|l^SbceS)hMmjI zAR_o25vo7|d>YB^B8Aq z@28d@KouUsY&=X~eFO{nho;3iG)}uqJdm@QX>Q1CH$-8HY9_Tyzj}AR!mlG1`4^sr lt)u8U04;D30so`eFqXaCdOY6|u>`(~Go^&xNFpC@`Y#?jNU8t; literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectLogicalViewProvider.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectLogicalViewProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..f71db4be8c25c8ca90d29655cd7bf9bc352fb80c GIT binary patch literal 3821 zcma)8S$7=875+-I)M(tcY{?cH+i`3#SSu3@-ejX#-mt@92@e=-laSU-NouR7d+6?w zqikdW5=bBm3FpL*yzs(}6GC3#ocxUZiM%9nzUpp`dZZa_=}dQZ)xEdw{qDVA z)j$9D*UteQ#Cv({!qsjRa7{m6lK5^O>1gJAdgf*Q_`ZIa5;J+^QOTnUB{7@F9Ofmg zJg#Fw+p+aZEe{879(BAT;pM65=Md!4z@o&BJbr*Bi62V*NFZ06_T1~L5(qq4a=p2t zqkf4BwuA7Ty(KemA;?#@|=lIuH%+lY6&DI>~ysNNSb{7P?W?g~(EpoG# zt^6fFP&L1Jj^lVkfsA{@(bb;`{TC=)Ytd_oD($&0J;(;8H>Wu0-53G+N8-H1&qyi) z{S-Sz=oWN};}WzK6TD+^=vqR#9C(&9N8Gl|B&8|X*IsPi^iO&2f^t|^3lvKY4zb;G zCn|Q_aGYTA<;!lvt0*0?z=3-g&!ajc28Qs0fp1`sfdd#M;%j-DTy6BTp67Z7zKOjC z_TfPT4`IK7hw+F&u|w@@D2wZS(B-1{8zy1~evV%V?7bKBO8nBmYj~Y3twmQ0t9^zg z-Z1bh{Mx{qc+0?V@LP$u4ZMTjN&Mcx1ime>buGRq5eBC5Ea$6g)@04ST(`|&*7a%< ze=zVzyen|5LyYUfOEk=Ce@gtxz@PDa%eGN961tYylN8vnifxPu9O|f%B&PKT56S+% z^x~3TJ81+)Ix23YO@SvmN+;c0ccidywAyN7*IJP06&tGLx(f|5*sgU1)Ceq_An8SR z(gR5oi6yqL9UFLfFwugiZ60DIptV|PQpAClAd*K{$RwISo^2>^i492irXoH$-%5M! zt1~9Nd)za!>Xn9Rhpe&DJ>B=4xb5kA%dYZV7TB{6mk7VrbwaZ<2~F#26oT$bZnt~z zDp_iyuwJH_jkyi6iw~dTYJyq0(>z|xIi-&&fs-w0>KgB)7BO72IQ(*Sm7emz_3j+-6GWq-U*=!qQ?<6I9Dn)h37X*bN#!>9fGg zD&a;Jy_$A;6YkZ_8oo)c;hX##zDcpb)&b4T{LWI3?8)Z{Ahw~4Gk`UG8)A558C@SE zbrU@!Ut!Z{NME^)%-@GcmywO8N0ZZI%aGCZSaQ0MUPdmQ-&#nwEM%6^{Sh}yVU*8D zv5C*UysPg+H(lPv17R;+KFBlS2wlEFho|WB4Befl!()`5h@7QvkzaHh-(v7096d(u zu5fga)>7fLcoP!Ll z@BR$=E5o0ni@z*?lD`~(-M6vn7HxKg5ou^aKeeYuq!)WC^sy1y6i-pQn-Z0g6&QWk zyn-!XVDm*{m=U)||AC&r;KJw^=owEJ(s!_RJTq3vtYF(sy-bzf^a}dMv#G;!hb&}2 ze;>OG*&XuW=pAey&lPfCB3sDadQFNC?*2lUFVXEXa$K1VpZjnMrwPzL&YZzn0hT!Vt%hcbnqcpOXlRU-1%`)6h2hksX%h;t1zb-K-UIOtPT?v~a z3`%FR5NEra&C#Ex;VY@$2g-La@F5qIDW6KDybznt;WA!`4IbiK|Mm8vu!5a8A=4iq ao%#eR-401h10fD{Yx7C%(~IHqmHz{RK^OJ_ literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectOperations.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectOperations.class new file mode 100644 index 0000000000000000000000000000000000000000..89c19bc3ab5178f98106c3e83d4fdab95dc60902 GIT binary patch literal 5072 zcmb_f`F9&v8NFl69(g?RBBxHAKo)1gu@oyb3vH5ynAo8qvK`_yX%k2pOJjQyX-1tH zB{tBOy)0!ZYY3FGmz}1IlQuLh`~c_hH}wGby*H9ZUO;fLkFA-veDB`-ZBKvy#~b$m z+>gH)=z!CK9k^oPDvCNv23&Yzq^#o!13DZXzJUOtj*5X!I7wVHkid1ZVz97~frk5=1Uyx?eM@2`^e)#6o!P}PyJ&}wJEx&_NC0TD z${G$eX>c?ztWl0@PQmtRRL^^EXfII2ft=^hWxcZPaw=O1onkiUc~>iCuF`l!f9{HP z%~BIIKxCm~2b}B-Eq~4qC#{lAYJHc~x}xRIWv4@*NVz6CQ*nxgM<;R`b~clE!^ zF$nEakUh!gsTtu??pQY+TKTIJR#_^?IAjFq_#R_U$59&=RHzE;Y0##v#65lhMhknlLB4@}i6zQwha)N9Z&@B$2vy zIAdFGkhRKAErF_uqqsSq^wAOZ7Wc3S#H8mtOg^iqVemg&)L>TEpRvMuhIiu`3{BU* zE`my=k_^50ft>b=1vMS+k@anHnlalpRjM61iM<1G_!q30FZOx!SA@(PurE&EDPDVIGz%&G$N2rn6wxWliwN+}INQ`K`7 z8P*W2L125q&NE;Z5K|_=oKxZ$ug% zj8tDWr>pFRD9g7J#X+Iof4z|{j!0B5T3@|BG`7kn3sgPO*m7x8^^#afO*VfsZqR+r zcuA2*{wC)7mvVds_}|0K%KQ`ZQpkDc2#k4Wok;eWjiVO+C?<(sb%|^Ff0kR zLB?-y1h;xU5@8)DWwJx)F30;R1YIAq0X9>NB+vLukfkbSp9O@lN z+iB-cK8YXnhAebR7RDm$mB{ z<)e-d=s2NcOvgCTNA1CV8a~KB-awRkv@6u4pOgUWmvCR*C5Dv$00|wGP))Tof*Ln? z3LlCL-XKij$bFHbxx476)*B|$sg0RC7)Ymj)W;_IkzT@P@sN3mdz64%_-!5}o+P*) z(%nG9TS#^n>5kyIM6ykt5g|!Z=F^l(`7?g!sIJcTJ}EzK(ad;6l2Nub-j=W5hR3>nE|1l5V4ThLaGvBu);-5h0eO(A zkhrB7ZpkcRt9sm~qMv!Ny&lDzWK^CdopaoKfdn4I07SlDlII>!7Nc`T1YW?S64xMC zUgU{l>=Hggq65t5kMb!YW3?4pTSG8ju5sN@1A=SY@Dc{=d{r1;=KjZHoZD96{CJJ? z3lZlGId>_ZGPYMxj>%DHuR?H!C+1m~3h2fx9XCfe&oeKbm;#xa0-2funVJHbNP&%5 z->5)$OaVjO^dnb2!%q>9eZx$Q-pRdxMQ0|8K!GkHD@;l*DbhnOgUMrPJs}aP;Omot z#>LF}8LBP>?IRD76zy0?Hu2z7b0R%N9Z5oa2Psi7R4CdUnWcMF^*$(V0jWOhSi;Vm g&=W5r(fSJ7>%LO4xmj9kL(973!lQFE-Gcdl0nubGSpWb4 literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectProperties.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectProperties.class new file mode 100644 index 0000000000000000000000000000000000000000..ec0cf697def6174ef598414e078ed3fe4d33dec8 GIT binary patch literal 5698 zcmbVQ349dQ8UIhR$qbuCBq$iqB}GVp-32UyA%Sj^jcmHf#_T3?s9~}@Ne1_FW;P)z zt)(cXP>R+b*0x%$(!;jeBcQa}leYH0Piyb{zU`s?znR@+5(K0C_`P}m_rC9Y-|@ch zd)ddIe&kUAYotmqf;jBOt+>sL*Wq>rudl%y@J0dNB;yV*WE__9W-sR8P6clf-?u7w zn}WL(+^yj43hq&GuYz|dxKF|T3XUjvr-FAWc(;Q02=WJnj0Y6F*NgYz{Q^AbMF0=U z_<$E5#D~22FebcMjH6y0!^2{DM35f$;v;xK#z(z)R0w$tAM>ISAD8h78K0DJW_zR~ z+!sp@^u)r+j(BgEgxc6nbyN*y)ZB0=VHtXEc!PwwZTXyOsX41(%@j2SpCW4_-q+g} zNem>n_CyA@bj1{WTEhHktDWKgu!0j3&PzmiMBnAn?tz}(cxR+7IS_4&6NHnS6?}$# zt$op0`#>_>dwC=|&>l@B6?~S;Oj~Y?MZ(<*K1X@s-ej~ROfmN9ovqPiFB@oGW(aO4sDMl z+Ipis$!MI~er4)V*Ls=js}j5=VcViT3cg0iPT?}u*CqHm!@UD-@h;k!NGSM*gtHvq zbVOqeLS#!@tdH^)d{e?4XQw?%^}i)y-Xtu``?iFIrBhDY`;G)T(c8ut^fK zltxDjUPjywpM>gWJ*Qh6B~&&v_Dk@z<9v^Ax$HiiBB9rcXw+ z3>B5I&ORikS%aFIGec%UpES)Z77BU83Nfuh;ha^naI?+GbE{1wMY|-_r3_8Aw03Ps zEoQ7lU%O_e481^eC3H5-#)w&3I)^8AI6 zI5eag8^q7G=AKFxiAc-~eXWH0)4EE~P_~EU3AbWG_Ok0+%4z60}*K($HOXF2_Ie8S`~8%fGn;mqdQ1I?Wfhu2p|P>C;MgTWk{mm)f z>|$0xEu&>A!t{@5hUO0hD5J&^Vat%Px`b@0WikGeGJ%|$rMGhC>ZY#ogrgvJ4!U^6 zl)0rDLuyK!M&HAVlN>Jyhpe5!pykqqJh@8rCCQN-%dsX(zF-yRE_CrVi)!W=$=g@j zunjtcpgC0bAK9v#g>xC*KVk>7yDO3m2cq2_VlhbP%lMNIf5u;Y_$&VA!!EFvpI^RR zt>cy!HVk##l@?3^AO4Pi$oQuZ|H4z^+WniU;lqFMUmyO5r+s*a_Zd%?uj%xJx0B}y zpCn<2PpS|)t$Myah-TOt+Jc>i!KJiQs0Rue)f&nhStd8_V+jznr#{8dOuLtvpT@gryB9^=-cPW=5Ll%@;|R8P(j6jP=jTe7f5(`BYp`V&zRNJ!{09 zgAYhn)eN)g>}L~A3TAa)WcO+BT%V=0h8$I_drw2-_Ex%~VSB6n7evN>S1l>sq*J}nOE0T= zlrud6n@;Z*o3CUIBjx6$rk+&3z}6F-3Z<*(Y;b%qlS?RFW3a2MrskA}d3Mb0S6k9x z55{8txgO-t1?Qj+A*=#>JW&PK5MScLFD72=!j}@SbK&*Gm$`5g@dg)eCT?-zjl`Q= z_$9<)7j7kPbK!R4hzoZRU+%)2iK8yuN&He5juCgca5r(>g?osvaN%C!gbOE$`&_u6 z_(~VvLcG<5w-Il5VGr?DE_^ldH7Q2EuTO|Y{djBYdsI6ssddrR!*S$L2gw*h&#h3OP~r# z%%^=qtlwe92y~(<)M6*DrQrEIJVT8ucvKcSetDF%l++&5-6F+~L*9B6O4o7B*}C#5 zyxoD?nhE#%U4Hi+Wt<-Wmy!8A6Iz@Q=BKr7ZdU*x4UrisZqs=XJVH=$o zr3>S9VjpeaPU}@#K1|!QwEH@aMdWcK3fK$7_SAC6a;_G5Rt49u z;24(Gc}`$%oo50KM^M#N6*yu0Vz~`go`6cy6-ThGsj9AO0xO?``VxnFWmENZLfI`= zrdU}J)>S|D5KRlPG_2)sbsLzzt^CSppwk-ZupM+tBi)vz6P)$kG%b#Pi0@wP$3d>& z#-AYX;CDA(Zm(C`7x5lS0i9Gq2YKiq88{ZkK65#U(c*tM@_G%epNiRJiCI(SrfVF%#6v|q0&sI zJZD$t_lSL&IN@wJZRD>2xR3hZ#IFbU;uX}blAgF5ucU?^Y6on?na|JxRWfdou}{XU qWbBvmYDh8;NS);&QJ#pUgU>L{<(UjJUgKhtpW>MkZ5G$~wf_fQSo%l+ literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectType.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/SEPluginProjectType.class new file mode 100644 index 0000000000000000000000000000000000000000..3397bd3ead8d0c0b65bfc2e2351558226663fe52 GIT binary patch literal 1666 zcmbVM>uwT36#j$p0uQzh_Vx_!Q&aD?})m)xvrjL*CH;av2y>JBF=RR(8z#V&JScZJU5KdV0!xH6Qw<+8@Z<@4{D%mY=Hn?jjf3O&l+lI%mRPsbyIHtYtn7xi+>5gmfh?dlA zg{r?$?fdn8N6-am9U;|};Y>Pnp6GY4@zfExr-I{e{=%_y1q|av9da*L>4TgY5|2bfI@ZY`NzzX8@7Eyf> z#RZ%|lIADrkqXi80!{_|82RG?U&T)x@=phRjTq^h$0Utsi19XAMmD@garV^kaoW~SdMk3QRDuQLQYA>7$eI^rvg2()&OaK}lLT7N1q7?KoJ+ew> z>^s7ni(e5rOt9<|oa+Y-2q+wvaG3;V2^t}Lh5lD@jYdVfPF9g7XFejHihe>g6;-_9 sKw>Ka-sF%siR-vQ=sAkk5E{#Aba;lF$56)$;I{~xL(nYyMz7ra845aK0 zfdZwplwAs>r6d%|1OqJ{X@Qm&+R~N|I)IiA=%9=a9>4#cEK9Xxc&~m>-~8|S`JQ?I zu_pl>jQ{$v3d6OSj&uAR&h_IwY?jq09GI z`{nonIoVo+FUtI-8a(L3m;E>j4~cx+eAr%thy6GPUl9=>ks&8HdBGi-hDWhOhR0+W z_2F?pR^SQQJSptH>ciK3cuK*SwYr>`nNVnpq|KO_OgO{IL^f{O;bh8LZ$>lWXf~a3 z2CZ|z}9x_kLqZ#3m35k5cu~mThH@RaoBi|J!fj z8imSsxCWU!T3nNY{9(IzZZNO5NCBj)VDfIpm(b|ldm`b8+`KGAph8cNQ#GI(Y+==i-HZ;EQ6;n&-hD#YLOz+JY z(G6Wj(ltFZifYh&W7wV=;i=SEI2qXnF{>9$F(n-;@6Wh#DJb0ZI@wgzWa=?a zf)gCwBHHLU6{e0ZbnA%0^x>O2zJ;ASGRW#U2`B6Lwrsy6+diz;@icZaJ9ZTj3Wt1n zy_g`1Nbw8}Jh3$B=tqx^Q)F0!9_mpBBj$C}QpbsMJG<<5ye#PWIC>Rkm0b(6lmQ(l z6e*VmXT%tGvKbxE;=4M&hv%3JO!zaSj=k23x5T}4X-Q{WJfr*YeH}l*^EzI@4;9#2 zekAi;;aN(yBqenG7%%Ghi3~rL;b$_uB*V|~A|t7Y+i5d5(qgAy==ddmrQ>D%TE}nj zTOWR>;}zl5Je71U8>Kk4WbF;MGi2*{6|d>|J^r9DXL2-~RZ++5Q$WO6uM19d^;>2! zansB%5%Z5a{)9g>KZ+`JI5v~0w%4%Jy=KZjNEQtVjc zOTE)(VQfzr>9k3bOFulmr|yUBP%IE*J)_WO=d;RAP;sn?NSSp}q*E0Trj^u62DW=$ z(m)GPGrfZ0)ht&9w?@_y*^6$*X8}a2vUk>H*hbt;xsbxf?a>_$tung=wpf;2xW)-K z?H*{$+A%3T(oVX}becpJ4xcE|#QHaBN%T<^ubj>*rBPD)X9$GjB>JqR2UsOti0wdi zD!A)m7W1`yig0Ts4Y_h>9#>hW;i?nluQd*@F9Q{n1&d~m#Cp$ zL#7p9CmmfaV;LpHN+)HVLotj*Yr=}#(sgN`CRg{yvU{;+kCV2fdD3LGkl3f5Fg+=A zt(i)hv0lCe%LAlX4qWZWLZ`HQdSt|}UTp}JSW`}1M2Xcdb~THf$HKY96C#Mb8`fCn zP|``cb5U9PwQ-kO#acvbOBqpd19^JE85A>4q>8=x5MKp_2x_58XXZaT znzSf)W}97u296?p{BdF%mmq!hkwOso1n6}-eb_T~i;N#eUO3b2!vng#OS97rd^AO_gnY;~p z^l=sp?#Rj2gQ153L<>?ZMg>>Ev{C5&4VXTH8QZwkAWTGH&=f*U_rMCoGA1uj(L zV3AnpH&o?un9TfDd&)Hk%fpMxHMq(ZK#wTO;3`Q$rckn~OveV{UPO0Q*fn}lg>o7a znPR74LF%B0dSp@5;3R&a3qG=l!2KkuGPn#&umwlsMt&~11;^qx9EZEH z6!)PO4-)GMv|}fh@nzb z;8S}k`qV0{R;OT%isB@-0Vk_8`qd_!qBi4HbrDWem*aGG4bD(E;7oNF&Qe=psE0A2 zMi5nxBc`5$sdi$mdKPi@Jl3ffVX0TKUcG^YdK-gU6>Mz=94&~XHWz1W3y{+GMOte{ zMhhdWEyhM|8HThj3~OiLT z(;ma++S9l~djVH!FX1ZfWn8Vjf@`$bajo_SwrKC*y73~Xy<4bDTeS69i#RKjhIO#K z3We)gCM)TgJwp|t9bn_#f#nqlRV-3F&{0WK*K{9{$I9()i3_rlu3%M^0yu{y5Om3O z+)jty&6_)Tb|>rWJudTRlAXifdTbyD85G2jRRV)9y*=q_hvFo8&qCSn!`YSG@?~6* zE<;p74vtILS%Ga`izrfHpKUIY>6lRzD&XpJA5ZS**QW>A1h%@uEFhISvJhdUu>_04 z1Pj852(0Pd6oC-@=dvKdYVJgWy5`Ubj_+b%2grQyVqlY%Tt7tQZCr0JvLi~7NnL?S cHT%&vt688UMZ6C6i1B5|S7Qw~B%dS=lWDqQs)?l0aYskpv{D#o5_mcVKsBotY&G zt-V>%UcL5iYcICe)>>`d4VaeJUi6&yOHa?~r=I=;Z9nRVe)05q-kH4-6whhS*>~Q{ zbNM~b`&{1q`Q6tq1Goimskj}-I?;{eDh>DW?1YLLoK(?|dwF>uFYo8!W4t`2Vig|f zf{qN&3%b!{@d7U% z<>4^~L4*(D^BwqtiZ9|z3cjr1D*{T{nsBmaK_Hp-%&b`|IP;}KIcM34lIxr?4L@O& zJ>Mx>=S?>;H99HJCWE6?{Y1(b5$GnfhKN@G?b5U$o%%+-E}Wn2CpfzhG=-|{WT1)?c(B)K4M+2-MLF=M*ZdZs`-y=lkL z3&(ZW;&r$g_4Ae|u=4}xZn$|;H_no$$S^f$`UlKHDdm%o*9~n+J8mxFluX;onu)S+ z6%yeo(XL=a`Cc5`w0%+<8DhM>IoHZ2^<2uaJ>S(Wd9+^oGNI4bG`&kGDv=$UMgiWh@Qpx}=h{)9KLysJsw=1R5ky~1J>)unTk0IonsW2%kYw&|t{y62e` z{C8bDa^Anp2`s1Nn>t37B`lrmDgT;-!>0s&W_cOxR}8u`NSp|2WmWn|McA-8S-UprFf8hQ{fSz1MEZWENN%u(8r0 zzbTF)dNy0vBCA8gBTZV4WVmnFeL0%7{GbsejR@To`)1p+Tlu~9*E0^b9 zBKFZ0lK1u+1|_3K4U0+-2Q(|Lg}ELcS_R9WPb?uNsGEcEx&|SYc=BR{f1l|Yu2u3a z$EJGQd~LN`BKXS~J|UIgd4X-MUf-MHZe~yhaSDty`K3vQ$};lO=DP7Ds*?<_h0xY! z^^^!2(^2STWOw?gjL`LZoeAMeRfcY>>h1iawu*IR zc_00vRjlVJLF?Uc5g)pU>ld++Xl_WydPviau|;f}i9~v|9&G`eE4XQx$;oFQX6{H8 zLv{K{1zTdvDj1G+R}iZ+MjCv4Ba*L*n?)5{NyGsClmNs4gNR=Nf`lew(F#7&0*CN4 zqz`&rBVhB+e7ta*$$S(QNxlbl6Hoc z3_UQ`o!cnpw&MhLAcviBa4X7masjtddhDjh=m?&pRC}Hh?L~^;mnl{+Q%b!>FTlT1 zO8t}GiT|PJ?Aw%9|E0uw7Y9TXS}H2X~A8I4X`} zTIe_?EF2d$?hzhNh&jxNhj3CnjC;jnxKBKZ`^B?3C0@V-;u3W61~TGJ7~(I;ioe1X xf5&O@59GwZkr!{nYGjvqCrk)OT)^EpN-5EXDVadic!Itv?d+z1Rv&Ng{2!%;6~O=i literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerModel$1.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerModel$1.class new file mode 100644 index 0000000000000000000000000000000000000000..7f2311e6cea3f3f33a826632d90706ad20744890 GIT binary patch literal 1406 zcmb_cZBG+H5Pr6;96e53f#AESR4hd~ilU-uI|BNr)QB2C z_yhb=#@W)A#sm{nn_O>pX6MDN_ zhzScN3zHV^G1y_GcDWxfi-@66RZ+uLA(x`g-M1p(`cTJwPrEB*uh-1Rrwo1Zj?jf^ zhQ+Gpbsh%lFbtB0kZudi^%EVdJ@Jl5?q+498QVBMXQ>leQ*|B~w0R*#{G6du>>X}m zn<2AA$PBrvko;A$SL4x^R}089SXI6kYy|TPieUhQvnnNzmI6;}PM+nSZ&N5! zdFd#T48z5V>aMr%xq&AeZih*`a^UkY7D{RhE_Gv5C6Uh!+YDoWr*6vNQJEF#2TBXs zSmW`Is#}l$Cw3%pohMIsvxvT4)7{iNR?@Id6-agTrE*i1ep6_!_ zYMv%NzyBW!Y|fD6agBRYyE+t|snAInswj3n8M_NIZcW5X9)vuiHq08X{yC9hsKMJ< zG{rQcDmo>u7tBBl<}&TeQ1TU| dakZIq4cD8#Q7USLtUgpxQnU2>~H<_i_ri8 literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerModel.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerModel.class new file mode 100644 index 0000000000000000000000000000000000000000..6715bd8011387d4810ea311eae5525a69defe637 GIT binary patch literal 4804 zcmcIo`F9k@5&mYiXjZF{0Ezo@3<9K;y$b{bHrNq5Y#=L8kc5q6CmF3;%gDPk>p74F zP8{30Z`--=)8uku9BU!*dwKpjKjcr!%h$cL*JwpHkA(N=?&_|puCDs3YF7XF*WdmQ z;28dz#1O7^aj=p|VNtGLkV8R7F^SH~jxD(yxm}XOi*j(~;K{+4Ly*LEEG4ikg;o-{ zk-*IaUP|E8a^o`zyqv^m@rsUDlh}pVlK31xuj30{*o!a9lP}5P%R0W2#8>gPBp$@q zb$mk--%Q|JQu*sr(HlD6)bVW%&|sXmZQ+g;OwSXZhD347brwa=*RVh9xcQ7N{5fIT zUdAk0nNsB}6Y`wa&{I5X`%~`XIZ-GHSHsC>A+JHm3rZ!&^)sgJXOxh-ry@vA$>L?P zP*roHJvEdNuCQ~WrlptmFVeh{H|;yF&~UsxO@WnB0#CV4P@*-x#p&4@)6ENi(wP?p z4ZE|8=5=#9<1JZsKI4mJKQr#+f}*f}vKwT-Xck4tEXi@<Or1~q=m{Tmd z!t=u2olW{j1K)RSbwuquilc#5n19kL2ybFJR|w`sRjl)jWn2Ce8r~ReerT(3HFLBb zoA$(_u^76dAwEXuY1o*xY;iFt&IxzMoGWmrFYDyY!WGlCBpq(X{c9E>IGXjuyeJi% zl~N(dTXqd~xxn+CqIE;Kndylsbru3~taeg$nI1w_!zSV_WUHd9%dI1A6GI#c_1?ju zreH*a-K#_z!o5{($bh?6$+yD5F*($JL*z+cFx^PxcSo*kj{PpmtQ-Bf48DerLFw!+ zaosEgCSkAPRC_U#i6UHoWuhucu*E&|IwRCcYz74??^nLa6imW?)Nu+d2ISJn@}Rne z8f% zG)oqx&0#Pb_a1HUg%k6ZFCkVJrBTV65mcTub2+Brz>yAI5P5m!zUcaKgYzIh>NiqjGo*rwyFJ2_4@t@Lhb51!8f|N_#=tS2Z|ov$h)e zK7OE~J3NtFbv{x(x**1WZ*5#8n}hu8u%T4ui*jd)_WwAjz38DKN@%& ze_~oHjm;@#;LmtR!ybDsOqgovOp}(0&TKMp8}AzU3*OT(a=-6nb*(?_(p=@c;gPoR z5rsd^metZX?RnFk57V_?m^3`bGTD~qHL}e3Ejd@1zL@r1cJFH6){u`h&Go>%R%Js` ztSCKw@1C)}V!(`(&lf~Ph1XFgI@WA!Soy!1cA@dMfkvX*JP$Ydxy6^nq-mRZ`MI~D zC=0%ZU14z6;+M|f)*9JNn<2*-WUISy0sA#~BaUK-d>^Y+oe z{cOW$d77%I#VE!|@dAvKi$ChPnjl|Ht)AplI=K53&V>eLI7_Y#srQh4hl?0SICiSd z<4U!B0U1Ko8qT*A?v4tdYAJl7rLYkdKGRb8qb-GdqQWCBg|nFCLu3#d-`pD&9&agp zvE|Jhqr&G}2*>1?PI&X%jFODR^YnJCj7`}T7m4A%&1LkhA{kQsis}xjEs8QiYOA7p zLTXzX+gH&WQajYy#yW8JBf-n2I9|p!Ok)5u1i%$W_-S0kGk6YHmBHI8MuibhU=|;v zgapQP&GdhUrjOjk&iAqFDj~YNj6EM|{S%5=$5r^S2^8#{u{7Up0!X;(3 zgnS=1^G&m~^e}q(vZuK^#dLXwFO#Sp3E%WA*9PJTMs<9AO2>0Lt>8B;M+t~aoMl-0 zWmx(Sm2o($;!?(7-I={K6SzSmZ}Qrg8XVUjUXo;XegdE5#h)T)ob$k@1We3v6~$dF z3Z30e(8-9RM7aq)mcW2Kz^L^)h=gj!--`{-?;5B?W z02`$o25~~KPU?q~!yI1C(fj&dyn#0@yp=;g-qw$IwB=n3?^&3)aLRzy2>ffZ8W}iR z@q@bK$!J{)FLXphIf>6%X~)bnys4J`nsg1EtAw&98?OIF!)?};mj+jxVdQV9>oRaw z7gu6mvcH^qVhqCdMW3lKKWAXE7c|1RR80mN@RagYbjH9}h5rTdzcuNFrY*zlnt^PY zsu~!sC{JE$Zmi4Tidc7P8LRkJ;jW25>F>mt)v_5Fy4;AA?^RS7Nlyj_?28`XWmklu zr2k4UxphR%|C@vw4~wd%U6H}3ey|~H2Br#?Yoa9_u^BnCCB4X5h(i|jdS2IOu#`j3 z3u5bPO1OUAz-Tw_d~71;;A$kQpD&9>tNQV$8xB8}H+^g|jvmaLz*6 z#(6AK$W*j;oi>*6fsG4#_eCA>Q4dF~lh>~Pu?;C}yH#x!7HXmq=^2{X6%et2>w1^+hW1ekh|g6{`45W(yx{4Xm098yr54ZXh@Omc(J+zJuVwLJ$34Wnc057L4N8FpH%vWQr%Yki9{>iI?~si(`Jo z0B#ZcHj#e9%d{UR5BK5#CivDX&1uFf&6*+0B&HIsFX_?o)5V*}Ze!0k=;JE$Ei4m1 zpnth^2X-m5je*iOa+*97lOI4I*FVF;J*Ipg2l0T!zaWoacO)^LCNWL#k(hD_M{$g# zdG7Cr@fY$IrshMxY{i|7keL4)JHMbcsn}f8X{MLSO#WO%y2h5MZXJ|@o}l=IIWwN0jclL_Al+pw#)30<3sBC$*y$05FR%**EA I@IjdW02eC@I{*Lx literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$PanelProvider.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$PanelProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..cf7e08721905b896a9b2edc70ba5b7a66c75b1cf GIT binary patch literal 1750 zcmcIlYflqF6g{&oU0Sw)yae%qidYJ=isGw;U>Zy`1!_u2@Qc|llRCKUZuWuVAM%Td zkU)r<7{8hLn~d?!mTss>Oe|)zvom*Q?mcJjxwGGYe)iK7Fl{qj%iq{h9~6s(3lKf3WA@F&Vul4iFNKV zR7yTy=dR^!yH;2ec8uPPvFeqDax{00MZ?W#lT!jd(2QW)ZJ@AzBk~`QPaaXq^f)Dw z;d!prJdK}}C=!bqi)FsmFbr*xNErrC4w$V3hWUzw8|9V?fgw|ILeJ!ng%rTpUo$o( z>qA2y?vh-N*NTP?Xd1HURB=zkeLSF?HZ6;Vs^THTvr`ulL${2lTLu;Ia#a?T3R2c` zYvmThZb+A5s8Nc4n44=Y8bcx{WtfeqG;SNR)_6c!I;@2w6bp5g9c4|Ni>Gk93^V`4 z1tWCfra=OuD_D`Tpqp8d${<@;)bFJ+NJ{rhO%~m#6FVwiG8%~ z(t-reQrm+hwI8T`PmXrT!7c{LGEm=)Aq>+9CbhBe6&NSafY60+)1T>0r{=`fdBvi literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$SubCategoryProvider.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider$SubCategoryProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..1ff1bd13a49cf25033e2c592911ea17034de014b GIT binary patch literal 377 zcmb_Y&1%9x5dOy6q(-F$=^K<%FD`iX7%CJB3W0iF==|M*SB; zlG)njJXV?s_u1oA*M%}uXP2B;Y3(b!Qt#{nuvQCpgS|+M4q@hb!KJpF^1u+~ks|UR zjyS7!_b1}F1EF^k?K~O7F4fX|_Jo_?YbNu3Rzms@i6R1_5uOQ9lW>7%m>Re|)CfuF LN!TF7Xhp3ZQI2+J literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/customizer/SEPluginProjectCustomizerProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..39501523f4894af9b779071b593bc797fbca7688 GIT binary patch literal 7291 zcmcIp349z?9sb^Cv$NSu)8;DOfYL&MbklSzr3I2wNH?Jk7C+?LzKC9urAnp(0bNIZ5FNE+#9IV8b@Z}J`f(PV^uS$^~)bOriP4|etSZtuHTKy>kaES1dWjAU-Jk;t26bOAW&EQ+=F#yY#@q!0+j`g(fW zdpp$Dn(oVuT}CuvBuAqIxr~(@Z42U8|EcssjG8U zcTs93*R+u^6>vry%tTr$es=M`tY=>~pH8PTxhOY9+h=Vgv5Jhj!=JBDFW2$d6jd8S&%!Y%VosU1esX1D*Zqoufl+=8d93 za-q2Gc}qHZfo=SJ&Pqh3r=`pT)@ahmvnD0@v$4GNYNAb)o z%}c?^-eBy`MQy4|*}xhrY30@m>}x94qa=kQs2(-siU}WX+iZ+2-7Mgb5o1z&D{1!T z$A-m&%Y+`IsHx!Ng3q9XuYUZ7j~= zfR}MPkTc>}FdCHmSuR;ASsyk0mcWsyCKQ_HBCwsDq;KbqnmNa(Dnr#YE%n&U$x(xc zOwI~QFY=GhK{6fH#xo{eUSLm+1*(gf*(o6~oKKF(=xFc=x5><=@|n1~PQ4?&%28Q4 zjYO{st;#fQXpEZnX#Q~CO1S7%nznD7JIHEhQMGvmRGMYHE-a4ay=ga|Esq-1aL(3L z-Gn;K(v0?=ydQCjxB;nA2^3{cw^y2A9)H&HBD`3`UvxZzzcSQyJc_^Rcnp8n@DG8thpkXY6>vKKiGOMM zw~qhdaUH`jbv%J51-2Xyojj?{)lk7Ew=0D3>7q>d1!Bj6rOfT?y0;gK z*!DpymoPO^u8V-s*lHEp+`eJiY-%E?iwY6aM5Qit8bi#}MU|MZiv<)^RErvBB(+JE zi}p;$*emm&z{cYsZ(~t6uj5U)mR=XNx~LQNY&zH5sY}*>sa7hv!y4W0Olo4GE=~}O z=rIwNy|$g$ir3CemamhUPNvENAvIOVvpU{@Yjn|o$C+*mDsM2dJ5>r^d1QqPhIfRN z7-onZ)7BZ8mp>c03#?phvAWAsP{2N_&?2&pP?@Fg*$5rEOP*;*3Y=;R_HjE1R?Whs zGFTa_DASs^BeFr)=2TPFQaMvR6J*WYW-Du{hR@%$RTkn~=Ty*LdE1I>TFF-T$j&`% zdM@-0RRs&!K@zl_{)%Ox-?l>N)w6TqCkfuzMAOt+P%O$KLwbkSI~DS;S;x?n$OJ zQI^L{WiKB2wOmT2C4r`$aeougt6BSyc1M*$T7O3 zj%6-X@-mKW!3ECs8p<(33H+8cRgn2pm3sz8I?r@+j+dAdwH_$BaeU|$YpAnTVMm@e zq`NCbO*Ymri4;wh{@{BLy_+oU=yzk+-*E8

#kwu4kXj=a4*z z%*^lPS7RYh1-xFtw+XKE^IjL3fG^T~0A-Pu1Mo+d9YFc*ic*5tg(&BB6<4n2{r5q^xD+nZ}h4XQ`1~6^Mv&1PZ)DYR4LKJWtWr z?NttaNg?A#-915W~9(ru}sCdkKRZ>GGSX)y+!l z4Yo#()*9XOW?VBt{6njdSIs*NnF_!v*jT@|M}c zo_Qx{Y#Y97L6H2fCM5UIWT;cgTmGwbY;q@r#DaIjN-lX1 s=X_Lb9q$ne)WD+A9;jfFTtYE@{4s6`I+%v*`Mcg_jG;L1BY}$l0o2Q8{{R30 literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/Bundle.properties new file mode 100644 index 000000000..aacefb0e0 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/Bundle.properties @@ -0,0 +1,16 @@ +LBL_Fix_Broken_Links_Action=Resolve Reference Problems... + +#Actions +LBL_CleanAction_Name=Clean Project +LBL_BuildAction_Name=Build Project +LBL_RebuildAction_Name=Clean and Build Project +LBL_RunAction_Name=Run Project +LBL_DebugAction_Name=Debug Project +LBL_JavadocAction_Name=Generate Javadoc for Project +LBL_TestAction_Name=Test Component +LBL_Properties_Action=Properties +LBL_AddProject_Action=Add Project... +LBL_AddLibrary_Action=Add Library... +LBL_AddFolder_Action=Add JAR/Folder... + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode$BrokenLinksAction.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode$BrokenLinksAction.class new file mode 100644 index 0000000000000000000000000000000000000000..9f677e8b017ff3fa58814699ab99298104c68aae GIT binary patch literal 2436 zcmcImTXzyy6#fp-48bu(Qmw(%YpR4;hr}edVr>Z})k-iG8*O@_2RM>R$jq#n0rh9} zweP*W>Z%d#YFDo>{ZU=rXJ!bjMqQG%eBf}-KKt_RZ|}3=pMRhJ3Sbsr594)cF&soD zh9S)CBiZ>V<`m3Fu@J)ryb~jhcje_pxy#DkCAqvOm&^?ND3`o~4;2&? zEHMnZ>$)?UVVEg8qAskadEaWb8oHrbwz(l{u4b5Zp_L0Oo^-_*mPnQ*<4d}syO$Z} zQUhC0tujRNPRlUJK0NfgZ*Z?1A%m*+qjkx&^9EZXL#Fvw=p$<

    z9Q^9roAQV498N%4c_J&zw2tEEeu!l0Tkpu zD>GsQe&R(+3?oFWC2aS8ew`Z)(mxe=tqN{98Zq2=+w&Y2ZI|J=@B8_x4ExJ2uWc@K zE1*rO>yFQAI3*#*%4W;1i6vbUefSxLJtuQi@dgg77{^%^AK{9Et13RmHL6*OZ;_!k zV7D+FDJ~W(OZvTv&vnHsV8tg;K~cprN-C~nMa3t$p<-HwF5{+(PqC`v7H+Hf3~MSr z#}_KT#5EOPA*rH*BtvdMIJ*nZkd%4f)114y(a>^L$F->ee0&Tiyuv?=_oD8&g1V2G z<+Yk{=rv{NJ#FscNfb@Hp&7#U!#I|{^9Y@mWtq0Caq78lhZNep+2XEgQ?D-U&5~i9 z*Xvz}ena;1IsJmh>}q*kKQ5zF+ZsBJik7Q4wNiDlWz=Pd#Tvq0CRVs?^$UT=CUw5% zJ=d(?(4L^|+C+VJYPX0XYPH-|%9os+>30&?^qE|*%CY6)>K0^17Gy6oYOPn)S?Ocr zl@&E-xKsv-{EBGO0HB(7(Vv%*^;Z`8hPWeaVbsJ<;E{Fi^bJG?EA?`nxhsj6Gy6Y+ zsXp3gGP4ZxgD1b{IdOzrFy!!~;T=h>$?-Q~i!HM)p4anT(&r@U-NSq)gX8o&dJqhU zz(z;qaHQYp2%X1~r1c1$ZqqqL-zU@4kHFH85t{BGoPL5x2*Az@g_-B@=2a>lq8`2Nt_Cz%+py$VLc~9p7KM_@Q{BQ7)sMg zyhSU+X`G=|0{tccnoa)%)j}gZcoW)Zt;AdRKFMXi0JD{>iVT!<{$&xsWrwKHT`vBfLon-cD88Ym}4sT=B z2O#-8Kzw@06aLp&kBTJyy#anBK7S`Pe^9!A5_f-5w7>g!O$SIqc$>6CI7ih5Wx%M$ ILpX-ee}g8hwg3PC literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode$SEPluginProjectNodeChildren.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/node/SEPluginProjectNode$SEPluginProjectNodeChildren.class new file mode 100644 index 0000000000000000000000000000000000000000..2b01c755953a04621afe528268c7c4863d0c9a93 GIT binary patch literal 6016 zcmbVQd3Y4%8UKB|o6PQJl8{X}LV$1tOg5V=wt~tLjX5-s4VVA|+NP825C%58>+B>F zduZ?bwuko6p46Ur5QtQ5Ym2S+Q0viZTeaHr>0dn_?Nc7x-#0URB_YJ}z|4H#_rCA< zd+&F7=#_i!1MnLBF^DK`2%r@=%Ewz3ye$Zyv-5Vj^Nt|iiFf(&?lQaw@0E-9`SJcB zK7bDf@gaOz!AF9q#7Cu^kCox$xJjOUB1qOx%EzbV(1!)O$!9*P;n6IT9VPOd~n6S)jZlmCRUL z(%PdX#`G-Lj@|toU4xxH{Q^qbOdZmPErHd&DRU&6)U6?1OJ<^4+K9Sm(VY$r<&_@P z6KUNPxUiTyQ$U>=OQ%z&73Hnb_N3)9Utu#+L_i-W7R^dg%0=^&LJ_>wn&`@MQcQJ& zmdS9_pn{!7MjJ}#aRITP7`GTn!)g<_sj*o6Y$_E~%v+85vCYKYv`4_#k&4q5mAyt% z?;9H((#>5Gz4TyeSWE2DOhc~SO`mnp$OzO8bnQ%xjTlMSoPCthanMM_O+6`~_9TMq= zZVjZy%wfGdm59sGSl8HOn}}8A~6{M7#ODV@L)Z#g=Bw;ZB1b0m|4m zWb7SH2yAnlb`Iuw-r&)X2rMi}jIJZYdRoQ|ulGCGckd8rm>*#OAsb}(4h7$3RUmLJ z9`8$8#(@a|Z=-asns#!9dP%{msgI_{^(>7-MYrn{bkPzT$<4c_pnYk6_&|dB>I#3brKb&hG!U3mc?v176@#k3RN<;ow)C?O~VqjZf?7D zjq6EkvkVolK29gEDFQq_R~%|)nLLmN$z4+>cRCKT+RM6UuR8UFZsk_}dQuyetH|7d z9J)NLxl^lfT%>U~AHM!EG;z5b!D(qD-rQ*lv zRq+!%q++}Lx*FH0co;ub@G})Z$1hYoBG2|qmPhfJieKXKtX#Wxw40_jAPNT434C`0h3mmTt;~Q1LXLk;eOtg5Rq69iCJX z2e+TabF4-)SskY5@q2;VIdU=jDjSr77gW56#{{;&O3t}jn}RB^O%l&FObKi#BAM^#A+T{?d^2VbPIz-E;M78fPrfTjZ5SW2 z!E=O+Yi4{Fp_|-ppVRehip=0;{Vb#G?7m$&^XcM_ux^(uo@%SuAybKQopI_;6C5QA zyFrfm+!_-_IZ+gfT7Q-hn^s(0;D+oPwN7X1)DLKE-2=Nj^~|tor0pTMGRjz3nW}cwmSYgJkAmY|7!8RL3Nr*3 zis#xHBhDJ*WlIaq=zz=?IIQQd%_s!lrC5sd`Eyy|wfx!aK|R+O6s%WqkL}YwV~4cg zY?8o&C9_t-jiFAJ@ z<)8T<5r3hn{+2V(GTycmS5ksBYt~S!(T@Sj_mFlMzdW{i%Hcf&zk=QU3ikNO$Pvbc zeH%%nh*o;Lik9$9Atcb-d>a1d@Fc3aT@#CN6|q-bE}X=oyhqp37{K2t^B<_dKM}&e z=#7^M_hmx(H`d}mXu%m9_Dbg_7i28#*y49fYWWR6fS+FM<; zE#Z?`OdK--FDU{nSGCi?3J())C-}c z&ie{z1C3_jUsc5r_dOUUK8~EElh$|>oi78ehRLuxb_#3uMJCa30&9=OgvtdTKpm^86g$5~4VO5#A8uKbZqEJ8N<|P=kYZSV?rH5LYthDb2tk7s*S+ zQNpwRuHj>$dZz!nn^7;V-xqG7k)LOy^qD8;A7>}Y9ch7pOs5ulr33yc175?vJ!b>I(5|R)SP!DZD)$m)9 z^>-S6AHW~*$1?m0e=fsc@KPd*x)4d*EMJ888Fcf`)%}GBaGL993=QSx+WHW{2~Q8q*BN>rwQIjA`9r%jUu-h0m6WnCJr&5O*XBU@Ju8RFp$2u~#d{(b`bJFyM z=Mjz!4mQ|kLYybR`QwJ&&qpK{8&Igrx7BWbNXA<=yrkh}h7(#~Pk49Ku#*Ww)tbxR zID!>sI$(rCre)1rv}lpSK>abFM)zo?!_9a`mG6{@$zE=m+JCX^zw9;aPcs{%u|#3{ zvD4Tgw(8rvc#P5#;bzaVQ<@+e1;S}chNZG|_ivm}j9r3{7}aDwZ?QI9oEHS4NHEhKLAZQ|uEFJH8Dyct*MDk!8D zDSDMk0UJ)V}YGdTf z+~$lPGj2E$MpLKhY841ZmPle&WVzR}6O>L04uv_dRyxqVW=$E--RC+urs)$}mlq}! zn#Nt2pS&`Hj63@%*{i~IS(Z|^8|R&v>*>x-8B-yfR<$dfFwbH-Y4(XX=#{ zx)}>+zwoi-WW^(&wS}b zyKC|ob3ll@?la9AxpX62I#;oJ+^Y!Y7GbZZQMfsWk4!;RQWm_raIkyTgf+dn0Lwdv z0yS2FAxR|b^3=Gg*DYOmuB6!WN}Q~7A`puDPQWgdJf+WASiVsMEybjm4z&)m&vL60@YTmn0!Ixr%pD%x!W;rw+!3^2S23_;Aj= zsy>s>Id`VxB2#YHQHtTEEj`1QZ4RdPE}{`CoSF$s%KY+7w-5yZA(XW2*kJgQTps)u z$DCV{4b0Q*n3MD=)YoSomXrk*7~>*3pUqA|oOM9bW|PNaI`EXbQLH@@QD`V6-I#HA z#v&1FgC38oF_AV=gBGwsHl~SgYQ$JSO}cY z_H}^j#U%a%cQ+n^w!NvjWdtQnqbMCgps}*-5cEdAO+Jh%3L_|QY&wXF`!V%4ls7$v zvLmS6K7y)88=DWp?+!O-4!0b{BzL$abGXib5Y^6jMV&wEL-9crH8$53AHuYKsBYxE zV)9k9y>SH752E%yGFpV!v+Y0y+f}^&UyWL2t)H7%HE+52cO%5zIJ1U}g##7nLavmpjPe`3R7(NLb@8NlRFc2$4|^=S5Hf zb_Wslc4+2Pxbyk%l{SO7PzG5b7qJk!Koao9W5O6r?r|E_>I4VtZ zREmp`AQ_(&njX2;&O4wLJ&fbKo5qlGiA4zgU-nvmN zO7|9fy|GzK(%+V*d&|W>69=;vmSslf-cmmh)ceCsH``Zn82JgVLcvpsgUi9>%@prOIxdYuPe@MHGd-(7s z@*oGv9l6}m7|U)xL>86qN0khB?L%3U2mAh4o)n|^JEvwA0RY}ZJG~hTa0}1d8u~X*yqood)u0JX! z^cOOUlu%JO7Fb-Idy)z-zKM{y&a9OJh%wUw5%LwWF4+zuezyJUM literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build-impl.xsl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build-impl.xsl new file mode 100644 index 000000000..9adad65fd --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build-impl.xsl @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + default + .. + + + jar + Build whole project. + + + + ====================== + INITIALIZATION SECTION + ====================== + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + -pre-init + + + + + -pre-init,-init-private + + + + + -pre-init,-init-private,-init-user + + + + + -pre-init,-init-private,-init-user,-init-project + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + -pre-init,-init-private,-init-user,-init-project,-do-init + Must set src.dir + Must set build.dir + Must set jbi.su.name + Must set jbi.su.zip + + + + -pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check + + + + =================== + COMPILATION SECTION + =================== + + + + init + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,-pre-pre-compile,-pre-compile + + + + + + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,-pre-pre-compile,-pre-compile,-do-compile,-post-compile + Compile project. + + + + ==================== + JAR BUILDING SECTION + ==================== + + + + init + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,compile,-pre-pre-jar,-pre-jar + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,compile,-pre-jar,-do-jar,-post-jar + Build JAR. + + + + init,jar + + + + init,jar + + + + =============== + CLEANUP SECTION + =============== + + + + init + + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,-do-clean,-post-clean + Clean build products. + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build.xsl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build.xsl new file mode 100644 index 000000000..288568af6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/build.xsl @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + You may freely edit this file. See commented blocks below for + some examples of how to customize the build. + (If you delete it and reopen the project it will be recreated.) + + + + + + + default + . + Builds, tests, and runs the project + . + + + + + + + + + + For list of available properties check the imported + nbproject/build-impl.xml file. + + + Another way to customize the build is by overriding existing main targets. + The targets of interest are: + + -init-macrodef-javac: defines macro for javac compilation + -init-macrodef-junit: defines macro for junit execution + -init-macrodef-debug: defines macro for class debugging + -init-macrodef-java: defines macro for class execution + -do-jar-with-manifest: JAR building (if you are using a manifest) + -do-jar-without-manifest: JAR building (if you are not using a manifest) + run: execution of project + -javadoc-build: Javadoc generation + test-report: JUnit report generation + + An example of overriding the target for project execution could look like this: + + + + + + + + Notice that the overridden target depends on the jar target and not only on + the compile target as the regular run target does. Again, for a list of available + properties which you can use, check the target you are overriding in the + nbproject/build-impl.xml file. + + ]]> + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/projectIcon.png b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/projectIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..efb923b40690516038fa763ef9cca96a5aa6dde7 GIT binary patch literal 450 zcmV;z0X_bSP)3ct?C0nwvjtF2 zxf3AxiS1oC5uM3w0q&UdG#j>VcNVO(6x;#NH}t>IzOtWSgXJ*_)V*fj2d4AExy{kv zh#hG2IZw0Y*d+mbU0OqQ9F^BcbRR91007*qoM6N<$f_vG>p#T5? literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/se-jbi-module.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/se-jbi-module.xml new file mode 100644 index 000000000..01e9ab043 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/resources/se-jbi-module.xml @@ -0,0 +1,3 @@ + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/Bundle.properties new file mode 100644 index 000000000..56d0f658f --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/Bundle.properties @@ -0,0 +1,9 @@ +LBL_CreateProjectStep=Name and Location + +LBL_ProjectName=Project &Name: + +LBL_ProjectLocation=Project &Location: + +LBL_ProjectFolder=Project &Folder: + +LBL_Browse=Br&owse... diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectDescription.html b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectDescription.html new file mode 100644 index 000000000..21e9e6bdc --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectDescription.html @@ -0,0 +1,8 @@ + + + + + + Service Engine deploment plugin project + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardIterator.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardIterator.class new file mode 100644 index 0000000000000000000000000000000000000000..726a80b4bc3766eba9fe663ee65f8cf71941c213 GIT binary patch literal 8758 zcmbtZ378Y-d4B)ZNTVIivh1=82y-kqdm)U?B@B4k!z|uiHi*M(laN801%XylMiPgq z;~vyU?8I@}w07DiDLrTtJF)AqK-R`!YU3nr(>7_7G)?NHXO7-y+{EPlXGYRU>|&ne zc^1uoe&6?h-}}A)H^b-O`s_sjtHrxCEXNfUf2g5GK3`LDRfAtPUk~DQ8a|IN$f-Z7 z<wgMf8&2b_+R{=T=N6jdQ%?p|26y&KaxhjrQw=@ z{1NPm8cq0wq6xqJ2?$lgY!M8KTDd?AijZ8R2Sr^_Oru0m9~9G7(V$@)t^`FRpJImm zX;MYAKxla9j_tkOyY~0=?-XbpIBXm>A}J$%FcQmK$@IaE0(IS)bS`hC^Lva`!4%Mo zTZXy@dj)3p^!Dxd4(;F5HL#l#{$x5~9v2Y(0)ecNHd8qc4$B6G^rzFN)txeOIg`Un z?;FTi2P2uRnNB9m$lm1rhLz|sb8#z~&1bA7_Ac7uJC?j(VEzpkb6MbyWICDO%=If; z_XsH6nFI~5A4sOnp~Bb!)7oVmNO7cbAQLxIdkiZn`|hBUKa`|Nn+9@b!px>JC$g!+ z!DKp;wK9jzcs@cCXj~-LJ8X{+JHw92{dvq*%-^4S?+6=`z8r=DCxvGNwWnSXs*4ekWZ!}F*DCI)mmn*kjk?oy;(i0 zB$8Gi5AIAPGm*Yz%9PQ_8kU*nmYJ3AK9McDd~v0$JDjc!!yN~t(>HFWoVr-vh#wg= zvUZ?UF^fsfyy!h1H?#R9L8^+`v@w=Em^ShSi)UC`eTFF{YZ5L=BbB_Ln-;FPF}x(A zw7fZ%P0>$%I|P0Kkh2}&9>BAwhkIHo_M|dK!nAUc9wTp**4N17Y4*6H zbWr-D=5SnKwmo?~k~_vsjco7EjAb)vdYbcs(@oA^<5)gYF_mN*(mn}=8Iu5kg*ykdYfQk2B89x_e12>u?VffiMtI*%`8(rn7aIv{TZ9z^zkJK^3i(w#b+s5?E)u zCvD~rm_|Am$z_uzUdk1+*^HHskf|eG>AcHJ+sstflzc=3Z2pqA5rBHa9PP65$x$Po zXL$5@CVOJ1nadQcIPFeX=D-w~cJSpz!Sy4R@ti^s0V%mdnni}OZ5TH4JZ>PtjF97M zrjRFl9FdXp0;F1?T*JdETpp8zV{;U#Xh$KRxj5aQF3+;GP{kZp z6RNmH6?0WFPZjg|$9u=+U&oQLtQk*^CgUD2uDL0?f*$En~E)Cc7z;+FRB7;r~2*`HK^vq#`SQm>0L!=jhC%vSKrMg%qmg{1LXw^j}RjkxS zM66Q9t-4q(Zqvo>cw852#9DH5*_;ydlSj92?H|k}3Mo@Z47+qBz}9Zuqhk~Yb+JyY zx2b!k+p&ss~y!qb(y4Zt#y4Wkx?PE^r;vO-= z^c?Kn)z#TQ)TfJk#So#vq+EG?jJHlhk==3;cTC4={1%I;n8A9&+#Bl|Sa~d$;8N$< z9x!e#BvULB=;g8yUEC*Vz&r7{!0H=jM}MibW2sQCNt>q_uPZy+bjBL9D^`bx=ex4$89A`gm0Rp`gEYl1#GMV(i&b2CNx(eL zVv4tgjipJ8j6yO}tTS9f>^_vqq13MB`{KjnCtgAE}j%XMa)c50v=YBMK2J&v3d5sG9`NV$~=)TKLRVu(DS|z zIA@}FDt5`l^2bx8KJt>q`pL+d&c#)q<%cuAYVcddF3XT_Q<8f7$UjchS))!Ggq!k{ z`w6JXuK^>=Pi90{=cFRbpm3t$)(|{$FrRUTu#jIJmqTC>0faGx9c&NtOKS~u_TS;@ zH?zOf(+_hEOHg|)3sC#XTA0s9%3#gU-*>Wi8=rztf7>~T=j~CPg&8wPu|IDoh-pv7JZ1Se24at^-dI4>Y&1nfO4InOfKUA=)HgQdE9Nf)!nE_KAM6;%^r6nzFs*YO4NpVuJdeh9sY0<$ox>9XTWCrb znz0pg(2b?&K`Z)fwbFYO?W*--84lwJ573O6NMVes=b!;;wtUENrS!40D$CY;I5G|5 zEwrkzROI-FJjWEy6>yZT8XRN$I8N}Fp%m}sZfVg6+uF|})P5c_20PB9X~;fSGtV${ z9J9{wT+TpanB6wtS~A@XxqQqU^lhHU`MDQQW4nCLTYUk1yN)Uy^HyI)sAFDO z8OMTHShD*^HbjK_<8&S{ker& zPf?>!`p%7(Y{_)tr)H+nFXAEYl@Vdg_p5j~^drnr@rd{#7OQylO)Pzr5(VB@j0J7; zaR;!#_O&jgt0lUc?UrDC+W0fKoNzNK06dsRXfzQLVFF`5VIhw-(-BoNZGmf=z+-rv zYGoeB5M&EzZCvJm3Cm?_EgGT9Im){klh}yj_UB%d-Sb#cohp_mRa#wDLcR^U3i^2> zsh~*;<-fTXmBeYN${8rWXE^Re*2(!}9$8JUEa^Qz^Yl*1H+*??#ct(Oimj7kKRSiH zlOB0>mGVM&%KaZK@!5!L<{V~p>qiipKpPpR{pGe1+ZRN;^toefqn)4+LM0^X35GD? zP$s)M9z{HQJ=HupshW=K)FdWR^AOcMOf`>E&HHYw=0o@;Dw9#YospN`(WJwrhgMgI z?fo86nrm?beiNL#l`ei_H=XrMhDxPaSgu(vH7 z7{~2VwLPp}z#0zNwCqH+jX4DB4&v8HIKNIx{wP-BV_1jZ#Ad$H--X{M-TV$|8YA;@EPLn%Oa|Xs9!__BB~P0Yw3t}JTMu3y>!et zHqb4KbWAiF2&>`1d29@;uc0oij^mCq@JEB;fb7y!o1CuyH5`^3HlM)(&IZS^baoD#dGIiVxb0!?iDmmFF0S4RlTygRqS}Kg_32K=0@C2(rA*W|OBMWZF67 zPx8?FdBw};Q*`miIerGu;M06Q$%K&OPJlnbx&-(nd(Y76&yw>$Maj?8;eUX6cmYfB z8U9D^S?an#3npm8MOyJ9Z|6(2t5t7 zdx;jlLK|PDl~;I2TxIsYPD?J(!U@`VkygIQ;9a7nuh5!TY3&tSa+MNa=j<13fIY>m z@217_29kg%whV&D87q{=PL*1x-Ihjq&JGFd%cV@cOc0%Ia72Dp`y{PZ?HetH>DTCv?oXmA0_b*wfg14t-I7N7(O7IwfG^T`{IXAgYGdi)(|vwYAN)&B4=H8&;cZ zS4XwB&agItZKRd{#_i*{JFM|%90O8Rs3RP5M4hT-z4Ey;2o5pZwsbs4_Xc_SKSBsP zCEsR-68IuVzr@y;SxkI|Max%NuzZbh`zA|?H+VOHi{;t38SFQ>_j}y^9m3|jyh^`s z!{HRmlA{dAIR+@i)yo)|9ZZ&P^34Sn8Y)4$37=&_62#qzGJw0dx}JMpVkG`&QLmnpG^iLsZ@Mz$0t$euv0Oh7R+Q2S#Q CGt7$s literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanel.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanel.class new file mode 100644 index 0000000000000000000000000000000000000000..ed551f2175354017362bc57998542922287b9f85 GIT binary patch literal 3506 zcmbtWX;%|h7=CUD41@s$BI3d#)v}1jTDOW@jUcoEu~;Z-YX>sIXh_n`uxR&vvHN1% zU*MO1sOMCu^_F{mQek*A? z2NeohS_c(^(Nx?NIV)-QO-_uMnUlsyf;UyM)TogdG%}W){mY;;ZV`3geLG19^fA+k z<^ry1Y4vmOW@BthgKE zDTPWS9*>S2$uTqLCq`j&i)(ZyVozJiv4}avIJy4pHtccQmKU$;Xhw^U&3IVh z;Db$s;Jv1>_kK~B&e)OI*(g)&nEu!eIA&VI>pI@Rn>yaY+X}TSb)?vTN5^(NqT?ZK z((x|d)9}8I4{%w>hqAQdBOM>(6NNfS$DO*;t+z;av*tQJ#cmy+;d6z?l{6NbUB?&r zl0%d4-%=9N@fEJ<_*#}eTp^9QWy$Lfj=|jkHu>FA=rSg7 zz3XdNEW5cofY+eHQwspgZmM$uogB}krhSrgZ(aUa7(H^sa%UI(NhPx_PwH&x5sEm_ za{p{7`fKyexvun$9GOhUWr#xLyk66`jWHhfDV24kpZsq(dG9u@` z&zK;_B4$`np%dZd*y3BEJM0P@TNV-S()Q_SCC!%Qa>*$s`I2^*7+jztN*8$?$?$#4 zZsgHaB0;huqj-E}`FyC5{hL@+EMfa`!|pR@XfT*`xA4LrN?!L;PPZM-ugA&stI0FF z;;6aygF>tSA$rM_OP$!r&x!^Vppj2a+ygT5{8|YJm2s~UUgKU0#aV9Sx`n4Gf_wrh z+vcF!ZXz%ooI}BN1h4TjfOf9s1Ow_QxE-rdkF7lEo)Wep!jlq;@d3~IfX!_`pzt@; z6SHWT;M#Q*%2hRrt4e-EXcnb%{GRFsu9+$-g1&3?zM8%_(eIq8X5Z8fS6(&I+N0R% z+uTJ638M5S^kEv9Lz&=u?iabQTJx|$u$>$je zQ%LokW0gKwCH7#i4|bW75=$wcXf2XfashI#A~ul#)D#eKaXKsYPI(5Ct0e&%9s50VoXz|Dqd}ICL+^ zs{WT_`{-B)9otXG4m^NkVI0o3;UBD^WUSNAm^7k1&Y^mipDDSl-Nb6?rkY;nbB)5c zSj~r8g*+dhglm-9Jjz+=n@ZHIRHaBREfB$v4rwY|k@AxaPi? z^LW)Sb?+42J58E7lLxpkV#gVru$83o1fK&8WSaXrhTX_wOcj-oKi1}Xf5)N;zc0{ zc~&u(=026S$kS39-4pqHlaEBku-;0}_>{-|yo|+E=rTTbAzf=9*!=5aS~9F&6vhyq zm`R?B=h7Co`M)Ob+AArWu1=LHq#nK$<*CVh+>3A@4CsN#Z(58U!~g&Q literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanelVisual.class b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/SEPluginProjectWizardPanelVisual.class new file mode 100644 index 0000000000000000000000000000000000000000..7f86e59ad7099fce71a62029c5d26f46bcae2a6f GIT binary patch literal 9025 zcmb_i31A#&b$)NPt6i-|*GiTxpK>hQIxMg4_(-HUu_ep497z_IEcpPO(e6kdd$qIK zot2LOAq{sp0_Adm0HsMNge$}w2bT~6*d+<1kWy$Nr3DHNNAJ>xI!?d$&+H`$+cim| zfBxhB@4f%s|G#6<|c(&IAoq@SLWNi}%dPu~hswKMp(EI%X7Ukdbh{Pf)bJsYIIqVEOiuj%^%`ayvH zM!J6+pdZS%ANlFIAT6Q4lfjPz^!I}JAN=%_AT`lXg|VMW?;oZ4d60fV{}iO>>6g;` zl{CMW;cuk(&(ixBf%{kK{hQ4FyA1y$NdHOy6{LgoTR;7GkT%MJ|A$@((C=jMztUWg zQF-V)~B{U57H!@4(k){M&*eeS@aLA=W_HzKj<1!fr16&?pEyxvIDKJ&iR0p_5 zz9DI916(I4=E$Hvz;gq11T=YGfExmIpX{6;AA6-m(te*^eGu! zDiG%Nkw?B^CHV$yo!aU@LdrFGF!<%D4mI?9vNLR!r&vl&RGoU_}S zOjvOvZi9A7v#?zn(@$7wn`vpEm7EA4i5jV+wv~W&$#i%}(n=@#R3Ee!6xzeqi0ER_ zNRC^{Ndp>O((KUHkJ({k3Pi#VNRRY8g&2>6UkAvv!rRT50i;1!G26@}lRt9UvQh?m z^Na04fV-VF?C~aa`!J4ROo8)-mm(`Dt;tC}4hAcRY&~+cUr#6{z*`Yhn9B5MbilIB z@e}ZxDLrNaa%r=YhLtelX4D8fUa`$cMUrO1wvwGK2Y`3dNTu`%NW9wdrTjY6;!E$x zsUc|FaTuTy5x`7vu%l)ax~V!?EG0xYKYbMZr9d4NFUy|@8|U!Gl}VJ2E6>Cjj*96( z%CK$tuuyWPpY<)Ka(BkDrht+Nyc;a{9FG_YQF_YHtq^DAFhYDE1irOV$@8_e}4>i z5U-YauhCoRts31%Z`9}w(pZ$x=p;>Pyo%d#9F13VSfk@Ivxe?O;E`=vZR}EEP@@wB zkEt(O$wfnrj>&3m(W(>WHM*6O8l}kAC@mD$@;as)uQsUIFyh0OKa8=awGcGlpz&r#W~eD( z!7(t6Z{jToc$bNof@G`4UEHnlHr}rB4(|2yE{$)NZ=c5fJRr?0G~UBQ(i@g$uQVeX zkMch0?HBk18Xx3+etxCKucA9Oel;IL$}Cb;L4@@4EgI`Q#x!@xh#}iIx-xFeicsSS zcWMX`hK8U#0dEsrVK*uZ<5)e+rp8D3sKzm#)Hu$T#tFVvk`PvF{2GCOt-vpx1|QMmLT=1xbSn@*zm9L$`1O1TQ+OJ*9+OCUqR}{R zrtDNB(npq{F`2MWVDBG^i>bgJHIo|O$#3v8Wbh`okPwtG3ko!3nO$AI{Z=#`gTUV` z5__0F=jXR*{8oM&)HHoVSK5?XO5?lu?Ha#>-zmL!X?*ug$5zD}(=~<0P#jVFa0UZa zB|?o@Y;jgYy=WqSBdX`ZJ5xg;vZBC={D6WZ8%CKHxz$EC&J+Q|6Kj!Ov(R}yR$eMq zWWiL);0HAcP@s#XrGnUY3n!UdP;BI?8nvUL@Qi8OjD-iry3+BegxVmm<;-!Di$dv1 zRotCU1TRor=d86<5eX@G`r}AWaWjHcR4r^u#b=&0q7LUR#iw;b@ocn^Bi0tfZXHY6 zNj+k_we~FhVULh>N-apjDRt%)p3S`^NDAuygOi+Ksew`*f>~X`{#=UFtG_IS(v9e_ zCu-VGW$bM}AlQmk8Mk#*&?vF6Ql?by)Tavy@H+)*zaB^V}d--HntRa+waHO49(mW|v zlQrPhE2alm+&SwpuS#MYny*C8Gvy;;ZUi?16T#IrxA`h>P7gWiu7R+KU_UJ^mcohk z7@~AheB3=IFCywv*CImJ10}>vbq<^1c5G*ROz*#-WobF88hQYhm-o0 zkxc0TYIDSu&5FAUfZf2Ky#Py`tHjB+A+lH#!=^2Hstyyf#i`zqn^8Jo+6!|BcxlXt zPpJEEb4xFVPLZN+^thK+VXw0fFEZ+aQRC{anB-yW*lyf!9lFz_u=`BVDfp`($6|!l z*(Zi9MugfpUIA3nb7(G}PSbI?{06~_>}JK%wlSz~^L{YyB+ToswtNS(<7N^M1#&TU z%>WliL~glkN7B&z!a@yCzu3#|H!aU83D_Cl1Kc{L=&h|F2WJfjIw?GkBY|==g(nRd zmX!pi3LF<+i45Yb22hWVCQZ3lYqlkG4l<_oGbC5Y@%S{GbXh>IjG@XCJUC-bbIZZ$ z^7i7TaMG#X^542g;NPL_l}r0!>M#4VI}Qs4edVDfDJjb zbGb`7Rl7>*av|9ogOe;NtTKyBR#$f+(PoxiN2^TN&%*RfrOcdBuA?Vl^T>VevmlvS z>$zn(vUEktNT9fYGQkGwPws{(HFsZXOTf0A%FC_0FPju;Dc;Nv;}O`TGHRe0O`;#i zi@%3%!5=RCs*jtv`rVX+>?-_=C zK!u-fJxjs;k5Kt(($K9yxAHXk^0QU>*#NrL0H`@lp*%os9-t1)XbwYjq+3h%p}A*h z-Wh7ZunK<=hpbe|%KY3)NQMj4a3NMhp+y;5ES=rw1kMfI^;%TOymRnDgtpA5BO?$ptjiDGjerSdXfWdj#n5NXJxM+EEN!PB&<@^B`}iq3lDANP+O?}^=>>Wd zy&0C}kry_{!tj7rqU?MMI#}NyTC^%d8&1)Yv$PQ=v}vH7&(L-4q3bi$(GE>@;%G3A zvJP(pMmO9`3(wN#{SDqn=*A9T16=B+Q&iS2oh>Ep5Y5()(Y*Eyb#*8$HTcd@cZRlQ zs0Vm}V7thoMEOG(ep(~M0UzQ(B|NDfp1S~VaZ7RX6?l#d!^bz_MXn1zz6;NHgLo0# z4?jNyPmcpb8qyK3+(~}GRMOk%F5o&uRrGe%t4IGG^iEIH$;w%2G!J>EIOgQ+?ynZV|jX>24 zdgZ_`{5ig^<>-EZKIq`$M_o;vckq-!zV}c?Tc|g*D?>MzJSdWO#Sd|3s1L&Ihr0Uj zp{mfp001HBJRDrGEC)BxE*d*Wb3|=70j+#@cX%Io>DMw{F2g~W+A9>62Jac#bDnBK z106n~7L@`wC=7M@&_d7i8hq!dw!!zhz~+NpTW-0 zV%HY{`4G(iVLD40`ZArt@4$~L@$NyW-iV-i3MwqYj-cxKK>vJBo5yRc&vX7>^Fyr8gx?gdvqWe5u?F!utj^wY;)q`7GEU%gf~=K?MD1Cqe?Cmb~* zc>9!Tt;(r!q#s>TM}|hArcqI3yHd@~ZJ~Y8;LUlHsmE@@iOT6QxWME1W%#QI4o|4F zwK{ln=U7F5s?JdkC%I3VY(4heuTD<%K#rs5a6&Jzj)HcE_CHRW`&XT#IuPD{jw_z<_Q?CNEAVIF zfMWh5j*$CZ7b?AvDy1t$+WoZN6}p(AlZw!(J4<88R}qP0(TB*$&^RnKnxTo=a?N7o z2*Uqw;iuoyB4owo^gCqT7ioZ*_OeGYz8;(`rxw@pR#PLLh7F1vjpS4~;;PUOi_Q@0 zOQlRyY!?W>xSm;49Y9q2l6$xgEQ>XjiZ#u!&zb^hl_IL$0Z1tl{~R$)684ud@*pN0 e#rGPpu|$^f&-2v8J%IQHzB`GL{+oEv%l`*(ExD-x literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/SampleWSDL.wsdl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/SampleWSDL.wsdl new file mode 100644 index 000000000..c2309ecfe --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/SampleWSDL.wsdl @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/jbi.xml new file mode 100644 index 000000000..f664e1783 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/classes/sedeployplugin/project/wizard/resources/jbi.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/no-license.txt b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/no-license.txt new file mode 100644 index 000000000..201dea1e1 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/build/no-license.txt @@ -0,0 +1 @@ +[NO LICENSE SPECIFIED] \ No newline at end of file diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/manifest.mf b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/manifest.mf new file mode 100644 index 000000000..15a68b890 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +OpenIDE-Module: sedeployplugin +OpenIDE-Module-Layer: sedeployplugin/layer.xml +OpenIDE-Module-Localizing-Bundle: sedeployplugin/Bundle.properties +OpenIDE-Module-Specification-Version: 1.0 + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml new file mode 100644 index 000000000..394249e58 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/build-impl.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + You must set 'suite.dir' to point to your containing module suite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties new file mode 100644 index 000000000..4f22f84ae --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=71a0da0d +build.xml.script.CRC32=12e4fb2a +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=71a0da0d +nbproject/build-impl.xml.script.CRC32=c30eb3e6 +nbproject/build-impl.xml.stylesheet.CRC32=68e521fc@2.50.1 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/platform.properties new file mode 100644 index 000000000..9dcb6d53c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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=nb721 +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-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties new file mode 100644 index 000000000..4b781ec33 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.properties @@ -0,0 +1,2 @@ +javac.source=1.6 +javac.compilerargs=-Xlint -Xlint:-serial diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml new file mode 100644 index 000000000..e7e5e11e6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/project.xml @@ -0,0 +1,148 @@ + + + org.netbeans.modules.apisupport.project + + + sedeployplugin + + + + org.apache.tools.ant.module + + + + 3 + 3.27.0.2 + + + + org.jdesktop.layout + + + + 1 + 1.4 + + + + org.netbeans.modules.java.project + + + + 1 + 1.12 + + + + org.netbeans.modules.project.ant + + + + 1 + 1.16 + + + + org.netbeans.modules.projectapi + + + + 1 + 1.13 + + + + org.netbeans.modules.projectuiapi + + + + 1 + 1.24.0.6 + + + + org.netbeans.modules.queries + + + + 1 + 1.10 + + + + org.openide.actions + + + + 6.6.0.1 + + + + org.openide.awt + + + + 6.11.0.1 + + + + org.openide.dialogs + + + + 7.5 + + + + org.openide.execution + + + + 1.10 + + + + org.openide.filesystems + + + + 7.3 + + + + org.openide.loaders + + + + 6.5 + + + + org.openide.nodes + + + + 7.2.0.1 + + + + org.openide.util + + + + 7.9.0.1 + + + + org.openide.util.lookup + + + + 8.15.2 + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/nbproject/suite.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-plugin-v2/src/main/resources/archetype-resources/pom.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/pom.xml new file mode 100644 index 000000000..1d99a3340 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/pom.xml @@ -0,0 +1,101 @@ + + + + 4.0.0 + ${groupId} + ${artifactId} + jar + ${version} + JBI Component[ServiceEngine] + 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-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType new file mode 100644 index 000000000..b05c8de7e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.project.support.ant.AntBasedProjectType @@ -0,0 +1 @@ +sedeployplugin.project.SEPluginProjectType diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation new file mode 100644 index 000000000..9be0d09e9 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/META-INF/services/org.netbeans.spi.queries.CollocationQueryImplementation @@ -0,0 +1 @@ +org.netbeans.modules.compapp.projects.base.queries.SameDriveCollocationQuery diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties new file mode 100644 index 000000000..f4399b22c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/Bundle.properties @@ -0,0 +1,15 @@ +# binding component deployment plugin resource bundle +# binding deploy plugin +OpenIDE-Module-Name=SEDeployPlugin +# deployment plugin +OpenIDE-Module-Short-Description=Service engine deployment plugin for ServiceEngine +# deployment plugin for adding wsdl extensions related to the binding component to the wsdl editor +OpenIDE-Module-Long-Description=Deployment plugin for creating service units related to this service engine in composite application +# category +OpenIDE-Module-Display-Category=CAPS + +# plugin project template +Templates/Project/SOA/ServiceEngineJBIModule.xml=ServiceEngine JBI Module + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml new file mode 100644 index 000000000..758a0eba4 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/layer.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/Bundle.properties new file mode 100644 index 000000000..7b3c45fe3 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/Bundle.properties @@ -0,0 +1,4 @@ +LBL_Node_Sources=Sources + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProject.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProject.java new file mode 100644 index 000000000..9f6059eee --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProject.java @@ -0,0 +1,408 @@ +/* + * SEPluginProject.java + * + */ +package net.openesb.component.${artifactId}.project; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.io.File; +import java.io.IOException; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import org.netbeans.api.project.FileOwnerQuery; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectInformation; +import org.netbeans.api.project.ProjectManager; +import org.netbeans.api.project.Sources; +import org.netbeans.api.project.ant.AntArtifact; +import net.openesb.component.${artifactId}.project.customizer.SEPluginProjectCustomizerProvider; +import org.netbeans.spi.java.project.support.ui.BrokenReferencesSupport; +import org.netbeans.spi.project.AuxiliaryConfiguration; +import org.netbeans.spi.project.SubprojectProvider; +import org.netbeans.spi.project.ant.AntArtifactProvider; +import org.netbeans.spi.project.support.ant.AntProjectEvent; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.AntProjectListener; +import org.netbeans.spi.project.support.ant.EditableProperties; +import org.netbeans.spi.project.support.ant.GeneratedFilesHelper; +import org.netbeans.spi.project.support.ant.ProjectXmlSavedHook; +import org.netbeans.spi.project.support.ant.PropertyEvaluator; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.support.ant.SourcesHelper; +import org.netbeans.spi.project.ui.PrivilegedTemplates; +import org.netbeans.spi.project.ui.ProjectOpenedHook; +import org.netbeans.spi.project.ui.RecommendedTemplates; +import org.netbeans.spi.queries.FileBuiltQueryImplementation; +import org.netbeans.spi.queries.SharabilityQueryImplementation; +import org.openide.ErrorManager; +import org.openide.filesystems.FileObject; +import org.openide.util.Lookup; +import org.openide.util.Mutex; +import org.openide.util.NbBundle; +import org.openide.util.Utilities; +import org.openide.util.lookup.Lookups; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.w3c.dom.Text; + +/** + * + * @author chikkala + */ +public final class SEPluginProject implements Project, AntProjectListener { + + private static final Icon PROJECT_ICON = new ImageIcon(Utilities.loadImage(SEPluginProjectProperties.SE_PLUGIN_PROJECT_ICON_PATH)); // NOI18N + private AntProjectHelper helper; + private PropertyEvaluator evaluator; + private ReferenceHelper refHelper; + private GeneratedFilesHelper genFilesHelper; + private Lookup lookup; + + public SEPluginProject(AntProjectHelper helper) throws IOException { + this.helper = helper; + this.evaluator = createEvaluator(); + AuxiliaryConfiguration aux = helper.createAuxiliaryConfiguration(); + this.refHelper = new ReferenceHelper(helper, aux, helper.getStandardPropertyEvaluator()); + this.genFilesHelper = new GeneratedFilesHelper(helper); + this.lookup = createLookup(aux); + helper.addAntProjectListener(this); + } + + @Override + public String toString() { + return "SEPluginProject[" + getProjectDirectory() + "]"; // NOI18N + } + + public FileObject getProjectDirectory() { + return helper.getProjectDirectory(); + } + + public Lookup getLookup() { + return lookup; + } + + public void configurationXmlChanged(AntProjectEvent event) { + if (event.getPath().equals(AntProjectHelper.PROJECT_XML_PATH)) { + // Could be various kinds of changes, but name & displayName might have changed. + Info info = (Info) getLookup().lookup(ProjectInformation.class); + info.firePropertyChange(ProjectInformation.PROP_NAME); + info.firePropertyChange(ProjectInformation.PROP_DISPLAY_NAME); + } + //TODO: add other configuration xml change event handling code. + } + + public void propertiesChanged(AntProjectEvent event) { + //TODO: add property change event processing. + } + + public AntProjectHelper getAntProjectHelper() { + return helper; + } + + public ReferenceHelper getReferenceHelper() { + return this.refHelper; + } + + public PropertyEvaluator getEvaluator() { + return this.evaluator; + } + + /** + * Return configured project name. + */ + @SuppressWarnings(value = "unchecked") + public String getName() { + return (String) ProjectManager.mutex().readAccess(new Mutex.Action() { + public Object run() { + Element data = helper.getPrimaryConfigurationData(true); + + NodeList nl = data.getElementsByTagNameNS(SEPluginProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); + if (nl.getLength() == 1) { + nl = nl.item(0).getChildNodes(); + if (nl.getLength() == 1 && nl.item(0).getNodeType() == Node.TEXT_NODE) { + return ((Text) nl.item(0)).getNodeValue(); + } + } + return "???"; // NOI18N + } + }); + } + + /** + * Store configured project name. + */ + @SuppressWarnings(value = "unchecked") + public void setName(final String name) { + ProjectManager.mutex().writeAccess(new Mutex.Action() { + public Object run() { + Element data = helper.getPrimaryConfigurationData(true); + + NodeList nl = data.getElementsByTagNameNS(SEPluginProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); + Element nameEl; + if (nl.getLength() == 1) { + nameEl = (Element) nl.item(0); + NodeList deadKids = nameEl.getChildNodes(); + while (deadKids.getLength() > 0) { + nameEl.removeChild(deadKids.item(0)); + } + } else { + nameEl = data.getOwnerDocument().createElementNS(SEPluginProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); + data.insertBefore(nameEl, data.getChildNodes().item(0)); + } + nameEl.appendChild(data.getOwnerDocument().createTextNode(name)); + helper.putPrimaryConfigurationData(data, true); + return null; + } + }); + } + + private PropertyEvaluator createEvaluator() { + //TODO: might need to use a custom evaluator to handle active platform substitutions... + return helper.getStandardPropertyEvaluator(); + } + + private FileBuiltQueryImplementation createFileBuiltQuery() { + return helper.createGlobFileBuiltQuery(getEvaluator(), + new String[]{"${src.dir}/*.java"}, // NOI18N + new String[]{"${build.classes.dir}/*.class"} // NOI18N + ); + } + + private SharabilityQueryImplementation createSharabilityQuery() { + return helper.createSharabilityQuery(getEvaluator(), + new String[]{"${src.dir}"}, // NOI18N + new String[]{"${build.dir}"} // NOI18N + ); + } + + private Sources getSources() { + final SourcesHelper sourcesHelper = new SourcesHelper(helper, getEvaluator()); + //TODO: add pricipal and typed source roots if required. + String srcLabel = NbBundle.getMessage(SEPluginProject.class, "LBL_Node_Sources"); //NOI18N + + String srcLoc = "${" + SEPluginProjectProperties.SRC_DIR + "}"; + sourcesHelper.addPrincipalSourceRoot(srcLoc, srcLabel, null, null); + sourcesHelper.addTypedSourceRoot(srcLoc, SEPluginProjectProperties.SOURCES_TYPE_XML, + srcLabel, null, null); + ProjectManager.mutex().postWriteRequest(new Runnable() { + public void run() { + sourcesHelper.registerExternalRoots(FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); + } + }); + return sourcesHelper.createSources(); + } + + private Lookup createLookup(AuxiliaryConfiguration aux) { + + SubprojectProvider spp = refHelper.createSubprojectProvider(); + return Lookups.fixed(new Object[]{ + this, // to lookup this project from externally obtained Project + aux, + helper.createCacheDirectoryProvider(), + spp, + new Info(), + new SEPluginProjectActionProvider(this, helper, refHelper), + new SEPluginProjectLogicalViewProvider(this, helper, getEvaluator(), spp, refHelper), + new SEPluginProjectCustomizerProvider(this, helper, refHelper), + new AntArtifactProviderImpl(), + new ProjectXmlSavedHookImpl(), + new ProjectOpenedHookImpl(), + new RecommendedTemplatesImpl(), + new SEPluginProjectOperations(this), + getSources(), + createSharabilityQuery(), + createFileBuiltQuery() + }); + } +// Private inner classes ------------------------------------------------------- + + /** + * @see org.netbeans.api.project.ProjectInformation + */ + private final class Info implements ProjectInformation { + + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + + Info() { + } + + void firePropertyChange(String prop) { + pcs.firePropertyChange(prop, null, null); + } + + public String getName() { + return SEPluginProject.this.getName(); + } + + public String getDisplayName() { + return SEPluginProject.this.getName(); + } + + public Icon getIcon() { + return PROJECT_ICON; + } + + public Project getProject() { + return SEPluginProject.this; + } + + public void addPropertyChangeListener(PropertyChangeListener listener) { + pcs.addPropertyChangeListener(listener); + } + + public void removePropertyChangeListener(PropertyChangeListener listener) { + pcs.removePropertyChangeListener(listener); + } + } + + /** + * @see org.netbeans.spi.project.support.ant.ProjectXmlSavedHook + */ + private final class ProjectXmlSavedHookImpl extends ProjectXmlSavedHook { + + ProjectXmlSavedHookImpl() { + } + + protected void projectXmlSaved() throws IOException { + genFilesHelper.refreshBuildScript( + GeneratedFilesHelper.BUILD_IMPL_XML_PATH, + SEPluginProject.class.getResource("resources/build-impl.xsl"), + false); + genFilesHelper.refreshBuildScript( + GeneratedFilesHelper.BUILD_XML_PATH, + SEPluginProject.class.getResource("resources/build.xsl"), + false); + } + } + + /** + * @see org.netbeans.spi.project.ui.ProjectOpenedHook + */ + private final class ProjectOpenedHookImpl extends ProjectOpenedHook { + + // TODO m + ProjectOpenedHookImpl() { + } + + @SuppressWarnings("unchecked") + protected void projectOpened() { + + try { + // Check up on build scripts. + genFilesHelper.refreshBuildScript( + GeneratedFilesHelper.BUILD_IMPL_XML_PATH, + SEPluginProject.class.getResource("resources/build-impl.xsl"), + true); + genFilesHelper.refreshBuildScript( + GeneratedFilesHelper.BUILD_XML_PATH, + SEPluginProject.class.getResource("resources/build.xsl"), + true); + } catch (IOException e) { + ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, e); + } + + // Make it easier to run headless builds on the same machine at least. + ProjectManager.mutex().writeAccess(new Mutex.Action() { + public Object run() { + EditableProperties ep = helper.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH); + File buildProperties = new File(System.getProperty("netbeans.user"), "build.properties"); // NOI18N + ep.setProperty("user.properties.file", buildProperties.getAbsolutePath()); //NOI18N + helper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep); + //TODO: add any other resolved private properties. for example, the project paths and lib paths + try { + ProjectManager.getDefault().saveProject(SEPluginProject.this); + } catch (IOException e) { + ErrorManager.getDefault().notify(e); + } + return null; + } + }); + + SEPluginProjectLogicalViewProvider logicalViewProvider = + SEPluginProject.this.getLookup().lookup(SEPluginProjectLogicalViewProvider.class); + if (logicalViewProvider != null && logicalViewProvider.hasBrokenLinks()) { + BrokenReferencesSupport.showAlert(); + } + } + + protected void projectClosed() { + // Probably unnecessary, but just in case: + try { + ProjectManager.getDefault().saveProject(SEPluginProject.this); + } catch (IOException e) { + ErrorManager.getDefault().notify(e); + } + } + } + + /** + * @see org.netbeans.spi.project.ui.RecommendedTemplates + * @see org.netbeans.spi.project.ui.PrivilegedTemplates + */ + private static final class RecommendedTemplatesImpl implements RecommendedTemplates, PrivilegedTemplates { + + // List of primarily supported templates + private static final String[] TYPES = new String[]{ + /* TODO: add any other recommended templates + "java-classes", // NOI18N + "ejb-types", // NOI18N + "java-beans", // NOI18N + "oasis-XML-catalogs", // NOI18N + "XML", // NOI18N + "ant-script", // NOI18N + "ant-task", // NOI18N + "simple-files" // NOI18N + */ + "SOA", + "XML", // NOI18N + "simple-files" // NOI18N + }; + private static final String[] PRIVILEGED_NAMES = new String[]{ + /* TODO: add any other privileged names + "Templates/Classes/Class.java", // NOI18N + "Templates/Classes/Package", // NOI18N + "Templates/Classes/Interface.java" // NOI18N + */ + "Templates/XML/XmlDocument.xml", // NOI18N + "Templates/XML/XmlSchema.xsd", // NOI18N + "Templates/XML/WSDL.wsdl", // NOI18N + "Templates/Other/properties.properties" // NOI18N + }; + + public String[] getRecommendedTypes() { + return TYPES; + } + + public String[] getPrivilegedTemplates() { + return PRIVILEGED_NAMES; + } + } + + /** + * Exports the main JAR as an official build product for use from other + * scripts. The type of the artifact will be {@link AntArtifact#TYPE_JAR}. + * + * @see org.netbeans.spi.project.ant.AntArtifactProvider + */ + private final class AntArtifactProviderImpl implements AntArtifactProvider { + + public AntArtifact[] getBuildArtifacts() { + return new AntArtifact[]{ + helper.createSimpleAntArtifact( + SEPluginProjectProperties.ARTIFACT_TYPE_JBI_SU_PREFIX + + helper.getStandardPropertyEvaluator().getProperty(SEPluginProjectProperties.JBI_SU_TARGET_NAME), + SEPluginProjectProperties.JBI_SU_ZIP, + helper.getStandardPropertyEvaluator(), + SEPluginProjectProperties.BUILD_TARGET_DIST, + SEPluginProjectProperties.BUILD_TARGET_CLEAN), + helper.createSimpleAntArtifact(SEPluginProjectProperties.ARTIFACT_TYPE_JAR, + SEPluginProjectProperties.JBI_SU_ZIP, + helper.getStandardPropertyEvaluator(), + SEPluginProjectProperties.BUILD_TARGET_DIST, + SEPluginProjectProperties.BUILD_TARGET_CLEAN) + }; + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectActionProvider.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectActionProvider.java new file mode 100644 index 000000000..f24d31835 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectActionProvider.java @@ -0,0 +1,136 @@ +/* + * SEPluginProjectActionProvider.java + * + */ +package net.openesb.component.${artifactId}.project; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import org.apache.tools.ant.module.api.support.ActionUtils; +import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.GeneratedFilesHelper; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.ui.support.DefaultProjectOperations; +import org.openide.DialogDisplayer; +import org.openide.ErrorManager; +import org.openide.NotifyDescriptor; +import org.openide.filesystems.FileObject; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * Action provider of the SE Plugin projects. + * + * @author chikkala + */ +public class SEPluginProjectActionProvider implements ActionProvider { + + // Commands available from SE Plugin Project + private static final String[] supportedActions = {COMMAND_BUILD, COMMAND_CLEAN, COMMAND_REBUILD, COMMAND_DELETE, COMMAND_COPY, COMMAND_MOVE, COMMAND_RENAME}; + private SEPluginProject project; + // Ant project helper of the project + private AntProjectHelper antProjectHelper; + private ReferenceHelper refHelper; + /** + * Map from commands to ant targets + */ + private Map commands; + + public SEPluginProjectActionProvider(SEPluginProject project, AntProjectHelper antProjectHelper, ReferenceHelper refHelper) { + commands = new HashMap(); + commands.put(COMMAND_BUILD, new String[]{"dist"}); // NOI18N + commands.put(COMMAND_CLEAN, new String[]{"clean"}); // NOI18N + commands.put(COMMAND_REBUILD, new String[]{"clean", "dist"}); // NOI18N + //TODO: Add any other ant targets to commands map. + //commands.put(COMMAND_DEPLOY, new String[] {"run"}); // NOI18N + this.antProjectHelper = antProjectHelper; + this.project = project; + this.refHelper = refHelper; + } + + public String[] getSupportedActions() { + return supportedActions; + } + + public void invokeAction(final String command, final Lookup context) throws IllegalArgumentException { + + if (COMMAND_COPY.equals(command)) { + DefaultProjectOperations.performDefaultCopyOperation(project); + return; + } + + if (COMMAND_MOVE.equals(command)) { + DefaultProjectOperations.performDefaultMoveOperation(project); + return; + } + + if (COMMAND_RENAME.equals(command)) { + DefaultProjectOperations.performDefaultRenameOperation(project, null); + return; + } + if (COMMAND_DELETE.equals(command)) { + DefaultProjectOperations.performDefaultDeleteOperation(project); + return; + } + + Runnable action = new Runnable() { + public void run() { + Properties p = new Properties(); + String[] targetNames; + + targetNames = getTargetNames(command, context, p); + if (targetNames == null) { + return; + } + if (targetNames.length == 0) { + targetNames = null; + } + if (p.keySet().size() == 0) { + p = null; + } + try { + FileObject buildFo = findBuildXml(); + if (buildFo == null || !buildFo.isValid()) { + //The build.xml was deleted after the isActionEnabled was called + NotifyDescriptor nd = new NotifyDescriptor.Message(NbBundle.getMessage(SEPluginProjectActionProvider.class, + "LBL_No_Build_XML_Found"), NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(nd); + } else { + ActionUtils.runTarget(buildFo, targetNames, p); + } + } catch (IOException e) { + ErrorManager.getDefault().notify(e); + } + } + }; + //TODO: add code if needed that requires the execution to wait for some other task to complete. + action.run(); // execute the task to invoke the ant target for the command + + } + + public boolean isActionEnabled(String command, Lookup context) throws IllegalArgumentException { + if (findBuildXml() == null) { + return false; + } + //TODO: Add any commands enabling check logic if required. + return true; + } + + public FileObject findBuildXml() { + return project.getProjectDirectory().getFileObject(GeneratedFilesHelper.BUILD_XML_PATH); + } + + /** + * @return array of targets or null to stop execution; can return empty + * array + */ + public String[] getTargetNames(String command, Lookup context, Properties p) throws IllegalArgumentException { + String[] targetNames = commands.get(command); + //TODO: add any special code that requires adding new target names or setting the + // external properties p passed during the ant exection if required. + return targetNames; + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectGenerator.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectGenerator.java new file mode 100644 index 000000000..0cc2e39e1 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectGenerator.java @@ -0,0 +1,182 @@ +/* + * SEPluginProjectGenerator.java + * + */ +package net.openesb.component.${artifactId}.project; + +import java.io.File; +import java.io.File; +import java.io.IOException; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectManager; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.EditableProperties; +import org.netbeans.spi.project.support.ant.ProjectGenerator; +import org.netbeans.spi.project.support.ant.PropertyUtils; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileStateInvalidException; +import org.openide.filesystems.FileUtil; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +/** + * Creates a Deployment Plugin Project for Service Engine. + * + * @author chikkala + */ +public class SEPluginProjectGenerator { + + private File mPrjDir; + private String mPrjName; + private String mSUName; + private String mSUDesc; + private String mSUTarget; + + public SEPluginProjectGenerator() { + this.mSUName = SEPluginProjectProperties.JBI_SU_NAME_VALUE; + this.mSUDesc = SEPluginProjectProperties.JBI_SU_DESCRIPTION_VALUE; + this.mSUTarget = SEPluginProjectProperties.JBI_SU_TARGET_NAME_VALUE; + } + + public File getProjectDirectory() { + return this.mPrjDir; + } + + public String getProjectName() { + return this.mPrjName; + } + + public String getSUName() { + return this.mSUName; + } + + public void setSUName(String suName) { + this.mSUName = suName; + } + + public String getSUDescription() { + return this.mSUDesc; + } + + public void setSUDescription(String suDesc) { + this.mSUDesc = suDesc; + } + + public String getSUTarget() { + return this.mSUTarget; + } + + public void setSUTarget(String suTarget) { + this.mSUTarget = suTarget; + } + + private void createPrimaryConfigurationData(AntProjectHelper prjHelper) { + + Element data = prjHelper.getPrimaryConfigurationData(true); + Document doc = data.getOwnerDocument(); + + Element nameEl = doc.createElementNS(SEPluginProjectType.PROJECT_CONFIGURATION_NAMESPACE, "name"); // NOI18N + nameEl.appendChild(doc.createTextNode(this.getProjectName())); + data.appendChild(nameEl); + + prjHelper.putPrimaryConfigurationData(data, true); + } + + private void createProjectPrivateProperties(AntProjectHelper prjHelper) { + + EditableProperties ep = prjHelper.getProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH); + + //TODO: add any project private properties here. + // ep.setProperty("application.args", ""); // NOI18N + prjHelper.putProperties(AntProjectHelper.PRIVATE_PROPERTIES_PATH, ep); + } + + private void createProjectProperties(AntProjectHelper prjHelper) { + + EditableProperties ep = prjHelper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); + + ep.setProperty(SEPluginProjectProperties.SRC_DIR, SEPluginProjectProperties.SRC_DIR_VALUE); + ep.setComment(SEPluginProjectProperties.SRC_DIR, new String[]{"# service unit source directory "}, false); // NOI18N + ep.setProperty(SEPluginProjectProperties.BUILD_DIR, SEPluginProjectProperties.BUILD_DIR_VALUE); + + ep.setProperty(SEPluginProjectProperties.BUILD_DIR, SEPluginProjectProperties.BUILD_DIR_VALUE); + + ep.setProperty(SEPluginProjectProperties.JBI_SU_ZIP, SEPluginProjectProperties.JBI_SU_ZIP_VALUE); + + ep.setProperty(SEPluginProjectProperties.JBI_SU_NAME, getSUName()); + ep.setProperty(SEPluginProjectProperties.JBI_SU_DESCRIPTION, getSUDescription()); + ep.setProperty(SEPluginProjectProperties.JBI_SU_TARGET_NAME, getSUTarget()); + + // save properties to file. + prjHelper.putProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH, ep); + } + + public AntProjectHelper createProject(File prjDir, String prjName) throws IOException { + AntProjectHelper prjHelper = null; + + this.mPrjDir = prjDir; + this.mPrjName = prjName; + if (SEPluginProjectProperties.JBI_SU_NAME_VALUE.equals(this.getSUName())) { + // default value. so set the su name to project name. + String suName = PropertyUtils.getUsablePropertyName(this.getProjectName()); + this.setSUName(suName); + } + + FileObject prjDirFO = createProjectDir(this.getProjectDirectory()); + + prjHelper = ProjectGenerator.createProject(prjDirFO, SEPluginProjectType.TYPE); + + createPrimaryConfigurationData(prjHelper); + createProjectProperties(prjHelper); + createProjectPrivateProperties(prjHelper); + + FileObject srcFolder = FileUtil.createFolder(prjDirFO, SEPluginProjectProperties.SRC_DIR_VALUE); // NOI18N + + // create su jbi.xml + SEPluginProjectProperties.createDefaultSUDescriptor(srcFolder); + + //TODO: create any service unit specifc default artifacts here. + + Project p = ProjectManager.getDefault().findProject(prjDirFO); + ProjectManager.getDefault().saveProject(p); + + return prjHelper; + } + + private static FileObject createProjectDir(File dir) throws IOException { + FileObject dirFO; + if (!dir.exists()) { + //Refresh before mkdir not to depend on window focus, refreshFileSystem does not work correctly + refreshFolder(dir); + if (!dir.mkdirs()) { + throw new IOException("Can not create project folder."); //NOI18N + } + refreshFileSystem(dir); + } + dirFO = FileUtil.toFileObject(dir); + assert dirFO != null : "No such dir on disk: " + dir; // NOI18N + assert dirFO.isFolder() : "Not really a dir: " + dir; // NOI18N + return dirFO; + } + + private static void refreshFileSystem(final File dir) throws FileStateInvalidException { + File rootF = dir; + while (rootF.getParentFile() != null) { + rootF = rootF.getParentFile(); + } + FileObject dirFO = FileUtil.toFileObject(rootF); + assert dirFO != null : "At least disk roots must be mounted! " + rootF; // NOI18N + dirFO.getFileSystem().refresh(false); + } + + private static void refreshFolder(File dir) { + while (!dir.exists()) { + dir = dir.getParentFile(); + } + FileObject fo = FileUtil.toFileObject(dir); + if (fo != null) { + fo.getChildren(); + fo.refresh(); + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectLogicalViewProvider.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectLogicalViewProvider.java new file mode 100644 index 000000000..79f1cae06 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectLogicalViewProvider.java @@ -0,0 +1,81 @@ +/* + * SEPluginProjectLogicalViewProvider.java + * + */ +package net.openesb.component.${artifactId}.project; + +import org.netbeans.api.project.FileOwnerQuery; +import org.netbeans.api.project.Project; +import net.openesb.component.${artifactId}.project.node.SEPluginProjectNode; +import org.netbeans.spi.java.project.support.ui.BrokenReferencesSupport; +import org.netbeans.spi.java.project.support.ui.PackageView; +import org.netbeans.spi.project.SubprojectProvider; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.PropertyEvaluator; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.ui.LogicalViewProvider; +import org.openide.filesystems.FileObject; +import org.openide.nodes.Node; + +/** + * + * @author chikkala + */ +public class SEPluginProjectLogicalViewProvider implements LogicalViewProvider { + + private final Project mProject; + private final AntProjectHelper mHelper; + private final PropertyEvaluator mEvaluator; + private final SubprojectProvider mSpp; + private final ReferenceHelper mResolver; + + public SEPluginProjectLogicalViewProvider(Project project, AntProjectHelper helper, PropertyEvaluator evaluator, SubprojectProvider spp, ReferenceHelper resolver) { + this.mProject = project; + assert project != null; + this.mHelper = helper; + assert helper != null; + this.mEvaluator = evaluator; + assert evaluator != null; + this.mSpp = spp; + assert spp != null; + this.mResolver = resolver; + } + + public Node createLogicalView() { + return new SEPluginProjectNode(this.mProject, this.mHelper, this.mEvaluator, this.mSpp, this.mResolver); + } + + public Node findPath(Node root, Object target) { + Project project = root.getLookup().lookup(Project.class); + if (project == null) { + return null; + } + + if (target instanceof FileObject) { + FileObject fo = (FileObject) target; + Project owner = FileOwnerQuery.getOwner(fo); + if (!project.equals(owner)) { + return null; // Don't waste time if project does not own the fo + } + + Node[] nodes = root.getChildren().getNodes(true); + for (int i = 0; i < nodes.length; i++) { + Node result = PackageView.findPath(nodes[i], target); + if (result != null) { + return result; + } + } + } + + return null; + } + + private String[] getBreakableProperties() { + String[] breakableProps = new String[0]; + return breakableProps; + } + + public boolean hasBrokenLinks() { + return BrokenReferencesSupport.isBroken(mHelper, mResolver, getBreakableProperties(), new String[]{SEPluginProjectProperties.DEFAULT_PLATFORM}); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectOperations.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectOperations.java new file mode 100644 index 000000000..5c7dd9486 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectOperations.java @@ -0,0 +1,114 @@ +/* + * SEPluginProjectOperations.java + * + */ +package net.openesb.component.${artifactId}.project; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; +import org.apache.tools.ant.module.api.support.ActionUtils; +import org.netbeans.api.project.Project; +import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.CopyOperationImplementation; +import org.netbeans.spi.project.DeleteOperationImplementation; +import org.netbeans.spi.project.MoveOperationImplementation; +import org.netbeans.spi.project.support.ant.GeneratedFilesHelper; +import org.openide.filesystems.FileObject; +import org.openide.util.Lookup; +import org.openide.util.lookup.Lookups; + +/** + * + * @author chikkala + */ +public class SEPluginProjectOperations implements DeleteOperationImplementation, CopyOperationImplementation, MoveOperationImplementation { + + private SEPluginProject project; + + public SEPluginProjectOperations(SEPluginProject project) { + this.project = project; + } + + public void notifyDeleting() throws IOException { + SEPluginProjectActionProvider ap = project.getLookup().lookup(SEPluginProjectActionProvider.class); + + assert ap != null; + + Lookup context = Lookups.fixed(new Object[0]); + Properties p = new Properties(); + String[] targetNames = ap.getTargetNames(ActionProvider.COMMAND_CLEAN, context, p); + FileObject buildXML = project.getProjectDirectory().getFileObject(GeneratedFilesHelper.BUILD_XML_PATH); + + assert targetNames != null; + assert targetNames.length > 0; + + ActionUtils.runTarget(buildXML, targetNames, p).waitFinished(); + } + + public void notifyDeleted() throws IOException { + project.getAntProjectHelper().notifyDeleted(); + } + + public List getMetadataFiles() { + FileObject projectDirectory = project.getProjectDirectory(); + List files = new ArrayList(); + + addFile(projectDirectory, "nbproject", files); // NOI18N + addFile(projectDirectory, "build.xml", files); // NOI18N + addFile(projectDirectory, "manifest.mf", files); // NOI18N + addFile(projectDirectory, projectDirectory.getName(), files); //NOI18N + + return files; + } + + public List getDataFiles() { + List files = new ArrayList(); + FileObject projectDirectory = project.getProjectDirectory(); + FileObject srcDirFO = SEPluginProjectProperties.getSourceDirectory(project); + files.add(srcDirFO); + return files; + } + + public void notifyCopying() throws IOException { + // do nothing. + // This does copy the old distribution file over though, which is + // probably OK because "ant clean" will clean it up. + } + + public void notifyCopied(Project original, File originalPath, String newName) throws IOException { + if (original == null) { + // do nothing for the original project. + return; + } + + project.getReferenceHelper().fixReferences(originalPath); + + String oldName = project.getName(); + project.setName(newName); + } + + public void notifyMoving() throws IOException { + notifyDeleting(); + } + + public void notifyMoved(Project original, File originalPath, String newName) throws IOException { + if (original == null) { + project.getAntProjectHelper().notifyDeleted(); + return; + } + String oldName = project.getName(); + project.setName(newName); + project.getReferenceHelper().fixReferences(originalPath); + } + + private static void addFile(FileObject projectDirectory, String fileName, List result) { + FileObject file = projectDirectory.getFileObject(fileName); + + if (file != null) { + result.add(file); + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectProperties.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectProperties.java new file mode 100644 index 000000000..22166d15e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectProperties.java @@ -0,0 +1,149 @@ +/* + * SEPluginProjectProperties.java + * + */ +package net.openesb.component.${artifactId}.project; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.openide.filesystems.FileLock; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; + +/** + * + * @author chikkala + */ +public class SEPluginProjectProperties { + + public static final String DEFAULT_PLATFORM = "default_platform"; // NOI18N + public static final String SOURCES_TYPE_XML = "xml"; + public static final String SOURCES_TYPE_JAVA = "java"; + public static final String SE_PLUGIN_PROJECT_ICON_PATH = "serviceengine/project/resources/projectIcon.png"; // NOI18N" + /** + * comp app callable ant build targets see + * SEPluginProject.AntArtifactProviderImpl for more info. When a composite + * application project builds the service assembly it calls these targets to + * build a service unit added by this project. + */ + public static final String BUILD_TARGET_DIST = "dist_se"; // NOI18N + public static final String BUILD_TARGET_CLEAN = "clean"; // NOI18N + /** + * Ant artifact type value required for plugin to compapp project see + * SEPluginProject.AntArtifactProviderImpl for more info. The value used is + * "CAPS.asa: where is the name + * of the service engine to which the service unit created by this project + * will be deployed. + */ + public static final String ARTIFACT_TYPE_JBI_SU_PREFIX = "CAPS.asa:"; // NOI18N + /** + * service unit target property. The value is the component name of the + * service engine to which the service unit created by this project will be + * deployed. + */ + public static final String JBI_SU_TARGET_NAME = "jbi.su.target.name"; // NOI18N + /** + * Name of the service engine + */ + public static final String JBI_SU_TARGET_NAME_VALUE = "paramv4seplugin"; // NOI18N + public static final String ARTIFACT_TYPE_JAR = "jar"; // NOI18N + public static final String JBI_SU_NAME = "jbi.su.name"; // NOI18N + public static final String JBI_SU_NAME_VALUE = "ServiceUnit"; // NOI18N + public static final String JBI_SU_DESCRIPTION = "jbi.su.description"; // NOI18N + public static final String JBI_SU_DESCRIPTION_VALUE = "Service unit description"; // NOI18N + public static final String JBI_SU_ZIP = "jbi.su.zip"; + /** + * bug in the comp app project build system prevents us to define the + * service unit archive file name and location to be any thing. You must + * define a hardcoded name for the su archive. TODO: will use the + * ${build.dir}/${jbi.su.name}.zip when compapp bug is fixed. + */ + public static final String JBI_SU_ZIP_VALUE = "${build.dir}/SEDeployment.jar"; + // public static final String JBI_SU_ZIP_VALUE = "${build.dir}/${jbi.su.name}.zip"; + /** + * these properties can be used in the build script that produces the + * service unit archive file. + */ + public static final String JAR_COMPRESS = "jar.compress"; // NOI18N + public static final String BUILD_FILES_EXCLUDES = "build.files.excludes"; // NOI18N + public static final String BUILD_DIR = "build.dir"; // NOI18N + public static final String BUILD_DIR_VALUE = "build"; // NOI18N + public static final String JBI_SU_BUILD_DIR_VALUE = "${build.dir}/${jbi.su.name}"; // NOI18N + public static final String SRC_DIR = "src.dir"; // NOI18N + public static final String SRC_DIR_VALUE = "src"; // NOI18N + public static final String SU_JBI_XML_PATH = "META-INF/jbi.xml"; // NOI18N + + public static FileObject getSourceDirectory(SEPluginProject project) { + AntProjectHelper helper = project.getAntProjectHelper(); + String srcDir = helper.getStandardPropertyEvaluator().getProperty(SRC_DIR); // NOI18N + return helper.resolveFileObject(srcDir); + } + + public static FileObject createDefaultSUDescriptor(FileObject srcFolder) throws IOException { + FileObject jbiXmlFO = null; + + StringWriter writer = new StringWriter(); + PrintWriter out = new PrintWriter(writer); + out.println(""); + out.println(""); + out.println(" "); + out.println(" "); + out.println(" "); + out.println(" "); + out.println(""); + out.close(); + writer.close(); + + jbiXmlFO = FileUtil.createData(srcFolder, SU_JBI_XML_PATH); + saveToFileObject(jbiXmlFO, writer.getBuffer()); + + return jbiXmlFO; + } + + public static void saveToFileObject(FileObject outFO, StringBuffer srcBuff) { + FileLock outLock = null; + OutputStream outS = null; + InputStream inS = null; + + try { + inS = new ByteArrayInputStream(srcBuff.toString().getBytes()); + outLock = outFO.lock(); + outS = outFO.getOutputStream(outLock); + FileUtil.copy(inS, outS); + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + if (inS != null) { + try { + inS.close(); + } catch (Exception ex) { + //ingore + } + } + if (outS != null) { + try { + outS.close(); + } catch (Exception ex) { + //ingore + } + } + if (outLock != null) { + outLock.releaseLock(); + } + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectType.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectType.java new file mode 100644 index 000000000..1378bd99c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/SEPluginProjectType.java @@ -0,0 +1,55 @@ +/* + * SEPluginProjectProperties.java + */ +package net.openesb.component.${artifactId}.project; + +import java.io.IOException; +import org.netbeans.api.project.Project; +import org.netbeans.spi.project.support.ant.AntBasedProjectType; +import org.netbeans.spi.project.support.ant.AntProjectHelper; + +/** + * Factory for simple service engine deployment plugin project projects. + * + * @author chikkala + */ +public final class SEPluginProjectType implements AntBasedProjectType { + + /** + */ + public static final String TYPE = "serviceengine.project.type"; // NOI18N + /** + */ + public static final String PROJECT_CONFIGURATION_NAMESPACE = "http://www.netbeans.org/ns/jbimodules/paramv4seplugin/1"; // NOI18N + /** + */ + public static final String PROJECT_CONFIGURATION_NAME = "data"; // NOI18N + /** + */ + public static final String PRIVATE_CONFIGURATION_NAME = "data"; // NOI18N + /** + */ + public static final String PRIVATE_CONFIGURATION_NAMESPACE = "http://www.netbeans.org/ns/jbimodules/paramv4seplugin/private/1"; // NOI18N + + /** + * Do nothing, just a service. + */ + public SEPluginProjectType() { + } + + public String getType() { + return TYPE; + } + + public Project createProject(AntProjectHelper helper) throws IOException { + return new SEPluginProject(helper); + } + + public String getPrimaryConfigurationDataElementName(boolean shared) { + return shared ? PROJECT_CONFIGURATION_NAME : PRIVATE_CONFIGURATION_NAME; + } + + public String getPrimaryConfigurationDataElementNamespace(boolean shared) { + return shared ? PROJECT_CONFIGURATION_NAMESPACE : PRIVATE_CONFIGURATION_NAMESPACE; + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/Bundle.properties new file mode 100644 index 000000000..05c5ab3d5 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/Bundle.properties @@ -0,0 +1,19 @@ +# CustomizerDialog +LBL_Customizer_Title=Project Properties - {0} +# cutomizer node labels +LBL_Config_General=General +LBL_Config_BuildCategories=Build +LBL_Config_Compile=Compile +LBL_Config_Package=Package + +# Cutomizer node panel strings +# sample cutomizer panel +# General cutomizer panel +LBL_config.general.su.name=Name: +LBL_config.general.su.desc=Description: +LBL_config.general.su.target=Target JBI Component\: +LBL_config.general.su.target.value.unknown=Unknown +LBL_config.package.su.zip=&Service Unit Archive File\: +LBL_config.package.build.files.exludes=&Exclude from archive file\: +LBL_config.package.build.files.exludes.message=(can not exclude jbi.xml) +CHKB_config.package.jar.compress=&Compress Archive File diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.form b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.form new file mode 100644 index 000000000..b54857007 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.form @@ -0,0 +1,128 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.java new file mode 100644 index 000000000..7943fd97c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerGeneral.java @@ -0,0 +1,178 @@ +/* + * CustomizerGeneral.java + */ +package net.openesb.component.${artifactId}.project.customizer; + +import javax.swing.JPanel; +import javax.swing.text.BadLocationException; +import javax.swing.text.Document; +import org.openide.util.HelpCtx; + +/** + * + * @author chikkala + */ +public class CustomizerGeneral extends JPanel implements HelpCtx.Provider { + + private SEPluginProjectCustomizerModel uiModel; + + public CustomizerGeneral(SEPluginProjectCustomizerModel uiModel) { + + this.uiModel = uiModel; + + initComponents(); + + initTargetComponent(uiModel.getSUTargetModel()); + + this.mSUNameTF.setDocument(uiModel.getSUNameModel()); + this.mSUDescriptionTA.setDocument(uiModel.getSUDescriptionModel()); + + } + + public HelpCtx getHelpCtx() { + return new HelpCtx(CustomizerGeneral.class); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + mSUTargetLBL = new javax.swing.JLabel(); + mSUTargetValueLBL = new javax.swing.JLabel(); + mSUNameLBL = new javax.swing.JLabel(); + mSUNameTF = new javax.swing.JTextField(); + mSUDescriptionLBL = new javax.swing.JLabel(); + mSUDescriptionScrollPane = new javax.swing.JScrollPane(); + mSUDescriptionTA = new javax.swing.JTextArea(); + mFillLBL = new javax.swing.JLabel(); + + setLayout(new java.awt.GridBagLayout()); + + mSUTargetLBL.setLabelFor(mSUTargetValueLBL); + mSUTargetLBL.setText(org.openide.util.NbBundle.getMessage(CustomizerGeneral.class, "LBL_config.general.su.target")); // NOI18N + mSUTargetLBL.setToolTipText(""); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(12, 2, 2, 4); + add(mSUTargetLBL, gridBagConstraints); + mSUTargetLBL.getAccessibleContext().setAccessibleName(org.openide.util.NbBundle.getMessage(CustomizerGeneral.class, "LBL_config.general.su.target")); // NOI18N + + mSUTargetValueLBL.setText(org.openide.util.NbBundle.getMessage(CustomizerGeneral.class, "LBL_config.general.su.target.value.unknown")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(12, 2, 2, 4); + add(mSUTargetValueLBL, gridBagConstraints); + mSUTargetValueLBL.getAccessibleContext().setAccessibleName(""); + + mSUNameLBL.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + mSUNameLBL.setLabelFor(mSUNameTF); + mSUNameLBL.setText(org.openide.util.NbBundle.getMessage(CustomizerGeneral.class, "LBL_config.general.su.name")); // NOI18N + mSUNameLBL.setToolTipText(""); + mSUNameLBL.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 4); + add(mSUNameLBL, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 4); + add(mSUNameTF, gridBagConstraints); + + mSUDescriptionLBL.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + mSUDescriptionLBL.setText(org.openide.util.NbBundle.getMessage(CustomizerGeneral.class, "LBL_config.general.su.desc")); // NOI18N + mSUDescriptionLBL.setToolTipText(""); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 4); + add(mSUDescriptionLBL, gridBagConstraints); + + mSUDescriptionScrollPane.setPreferredSize(new java.awt.Dimension(4, 40)); + + mSUDescriptionTA.setFont(new java.awt.Font("SansSerif", 0, 12)); // NOI18N + mSUDescriptionTA.setMargin(new java.awt.Insets(1, 1, 1, 1)); + mSUDescriptionScrollPane.setViewportView(mSUDescriptionTA); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.ipadx = 5; + gridBagConstraints.ipady = 5; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 4); + add(mSUDescriptionScrollPane, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; + gridBagConstraints.weighty = 1.0; + add(mFillLBL, gridBagConstraints); + }// //GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel mFillLBL; + private javax.swing.JLabel mSUDescriptionLBL; + private javax.swing.JScrollPane mSUDescriptionScrollPane; + private javax.swing.JTextArea mSUDescriptionTA; + private javax.swing.JLabel mSUNameLBL; + private javax.swing.JTextField mSUNameTF; + private javax.swing.JLabel mSUTargetLBL; + private javax.swing.JLabel mSUTargetValueLBL; + // End of variables declaration//GEN-END:variables + + private void setDocumentText(Document doc, String text) { + try { + doc.remove(0, doc.getLength()); + doc.insertString(0, text, null); + } catch (BadLocationException ex) { + ex.printStackTrace(); + // ingore + } + } + + private String getDocumentText(Document doc) { + try { + return doc.getText(0, doc.getLength()); + } catch (BadLocationException ex) { + ex.printStackTrace(); + return ""; + } + } + + private void initTargetComponent(Document doc) { + String targetComp = getDocumentText(doc); + this.mSUTargetValueLBL.setText(targetComp); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.form b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.form new file mode 100644 index 000000000..7d688a980 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.form @@ -0,0 +1,117 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.java new file mode 100644 index 000000000..a99cca3f3 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/CustomizerPackage.java @@ -0,0 +1,114 @@ +/* + * CustomizerPackage + */ +package net.openesb.component.${artifactId}.project.customizer; + +import javax.swing.JPanel; +import org.openide.util.HelpCtx; + +/** + * Customizer for general project attributes. + * + * @author chikkala + */ +public class CustomizerPackage extends JPanel implements HelpCtx.Provider { + + private SEPluginProjectCustomizerModel uiModel; + + public CustomizerPackage(SEPluginProjectCustomizerModel uiModel) { + this.uiModel = uiModel; + initComponents(); + + mZipFileTF.setDocument(uiModel.getSUZipModel()); + mExcludesTF.setDocument(uiModel.getBuildFilesExcludesModel()); + + uiModel.getJarCompressModel().setMnemonic(mCompressChkBox.getMnemonic()); + mCompressChkBox.setModel(uiModel.getJarCompressModel()); + } + + public HelpCtx getHelpCtx() { + return new HelpCtx(CustomizerPackage.class); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + mZipFileLBL = new javax.swing.JLabel(); + mZipFileTF = new javax.swing.JTextField(); + mExcludesLBL = new javax.swing.JLabel(); + mExcludesTF = new javax.swing.JTextField(); + mCompressChkBox = new javax.swing.JCheckBox(); + mExcludeMessageLBL = new javax.swing.JLabel(); + + setLayout(new java.awt.GridBagLayout()); + + mZipFileLBL.setLabelFor(mZipFileTF); + org.openide.awt.Mnemonics.setLocalizedText(mZipFileLBL, org.openide.util.NbBundle.getMessage(CustomizerPackage.class, "LBL_config.package.su.zip")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 12); + add(mZipFileLBL, gridBagConstraints); + + mZipFileTF.setEditable(false); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(0, 0, 12, 0); + add(mZipFileTF, gridBagConstraints); + mZipFileTF.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getBundle(CustomizerPackage.class).getString("AD_jTextFieldDistDir")); // NOI18N + + mExcludesLBL.setLabelFor(mExcludesTF); + org.openide.awt.Mnemonics.setLocalizedText(mExcludesLBL, org.openide.util.NbBundle.getMessage(CustomizerPackage.class, "LBL_config.package.build.files.exludes")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 12); + add(mExcludesLBL, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + add(mExcludesTF, gridBagConstraints); + mExcludesTF.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getBundle(CustomizerPackage.class).getString("AD_jTextFieldExcludes")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(mCompressChkBox, org.openide.util.NbBundle.getMessage(CustomizerPackage.class, "CHKB_config.package.jar.compress")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; + gridBagConstraints.gridheight = java.awt.GridBagConstraints.REMAINDER; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weighty = 1.0; + add(mCompressChkBox, gridBagConstraints); + mCompressChkBox.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getBundle(CustomizerPackage.class).getString("AD_jCheckBoxCompress")); // NOI18N + + mExcludeMessageLBL.setLabelFor(mExcludesTF); + org.openide.awt.Mnemonics.setLocalizedText(mExcludeMessageLBL, org.openide.util.NbBundle.getBundle(CustomizerPackage.class).getString("LBL_config.package.build.files.exludes.message")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 0); + add(mExcludeMessageLBL, gridBagConstraints); + }// //GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox mCompressChkBox; + private javax.swing.JLabel mExcludeMessageLBL; + private javax.swing.JLabel mExcludesLBL; + private javax.swing.JTextField mExcludesTF; + private javax.swing.JLabel mZipFileLBL; + private javax.swing.JTextField mZipFileTF; + // End of variables declaration//GEN-END:variables +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerModel.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerModel.java new file mode 100644 index 000000000..0da2f2a5a --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerModel.java @@ -0,0 +1,125 @@ +/* + * SEPluginProjectCustomizerModel.java + * + */ +package net.openesb.component.${artifactId}.project.customizer; + +import java.io.IOException; +import javax.swing.ButtonModel; +import javax.swing.text.Document; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectManager; +import net.openesb.component.${artifactId}.project.SEPluginProjectProperties; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.EditableProperties; +import org.netbeans.spi.project.support.ant.PropertyEvaluator; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.support.ant.ui.StoreGroup; +import org.openide.ErrorManager; +import org.openide.filesystems.FileObject; +import org.openide.util.Mutex; +import org.openide.util.MutexException; + +/** + * + * @author chikkala + */ +public class SEPluginProjectCustomizerModel { + + private Project mProject; + private AntProjectHelper mAntPrjHelper; + private ReferenceHelper mRefHelper; + private StoreGroup mPrjPropsStore; + private Document mSUTargetModel; + private Document mSUNameModel; + private Document mSUDescModel; + private Document mSUZipModel; + private ButtonModel mSUZipCompressModel; + private Document mBuildFilesExcludesModel; + + /** + * Creates a new instance of Customizer UI Model and initializes it + */ + public SEPluginProjectCustomizerModel(Project project, AntProjectHelper antProjectHelper, ReferenceHelper refHelper) { + this.mProject = project; + this.mAntPrjHelper = antProjectHelper; + this.mRefHelper = refHelper; + this.mPrjPropsStore = new StoreGroup(); + init(); + } + + public Document getSUTargetModel() { + return this.mSUTargetModel; + } + + public Document getSUNameModel() { + return this.mSUNameModel; + } + + public Document getSUDescriptionModel() { + return this.mSUDescModel; + } + + public Document getSUZipModel() { + return this.mSUZipModel; + } + + public ButtonModel getJarCompressModel() { + return this.mSUZipCompressModel; + } + + public Document getBuildFilesExcludesModel() { + return this.mBuildFilesExcludesModel; + } + + /** + * Initializes the visual models + */ + private void init() { + // initialize visual models from project properties + PropertyEvaluator evaluator = this.mAntPrjHelper.getStandardPropertyEvaluator(); + // cutomizer-general + this.mSUTargetModel = this.mPrjPropsStore.createStringDocument(evaluator, SEPluginProjectProperties.JBI_SU_TARGET_NAME); + this.mSUNameModel = this.mPrjPropsStore.createStringDocument(evaluator, SEPluginProjectProperties.JBI_SU_NAME); + this.mSUDescModel = this.mPrjPropsStore.createStringDocument(evaluator, SEPluginProjectProperties.JBI_SU_DESCRIPTION); + // customizer-package + this.mSUZipModel = this.mPrjPropsStore.createStringDocument(evaluator, SEPluginProjectProperties.JBI_SU_ZIP); + this.mSUZipCompressModel = this.mPrjPropsStore.createToggleButtonModel(evaluator, SEPluginProjectProperties.JAR_COMPRESS); + this.mBuildFilesExcludesModel = this.mPrjPropsStore.createStringDocument(evaluator, SEPluginProjectProperties.BUILD_FILES_EXCLUDES); + } + + /** + * Save visual models to project properties and other metadata + */ + public void save() { + + try { + // Store properties + @SuppressWarnings("unchecked") + Boolean result = (Boolean) ProjectManager.mutex().writeAccess(new Mutex.ExceptionAction() { + final FileObject projectDir = mAntPrjHelper.getProjectDirectory(); + + public Object run() throws IOException { + //TODO: regenreate any project build script and project metadata if required. + // store project properties. + storeProperties(); + return Boolean.TRUE; + } + }); + // and save project if required. + if (result == Boolean.TRUE) { + ProjectManager.getDefault().saveProject(mProject); + } + } catch (MutexException e) { + ErrorManager.getDefault().notify((IOException) e.getException()); + } catch (IOException ex) { + ErrorManager.getDefault().notify(ex); + } + + } + + private void storeProperties() throws IOException { + EditableProperties projectProperties = mAntPrjHelper.getProperties(AntProjectHelper.PROJECT_PROPERTIES_PATH); + this.mPrjPropsStore.store(projectProperties); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerProvider.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerProvider.java new file mode 100644 index 000000000..124e39f28 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/customizer/SEPluginProjectCustomizerProvider.java @@ -0,0 +1,230 @@ +/* + * SEPluginProjectCustomizerProvider.java + * + */ +package net.openesb.component.${artifactId}.project.customizer; + +import java.awt.Dialog; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.ResourceBundle; +import javax.swing.JComponent; +import javax.swing.JPanel; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectUtils; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.ui.CustomizerProvider; +import org.netbeans.spi.project.ui.support.ProjectCustomizer; +import org.openide.util.NbBundle; + +/** + * + * @author chikkala + */ +public class SEPluginProjectCustomizerProvider implements CustomizerProvider { + + // Option indexes + private static final int OPTION_OK = 0; + private static final int OPTION_CANCEL = OPTION_OK + 1; + // Option command names + private static final String COMMAND_OK = "OK"; // NOI18N + private static final String COMMAND_CANCEL = "CANCEL"; // NOI18N + // Categories + private static final String GENERAL = "General"; // NOI18N + private static final String BUILD_CATEGORIES = "Build"; // NOI18N + private static final String COMPILE = "Compile"; // NOI18N + private static final String PACKAGE = "Package"; // NOI18N + private Project project; + private AntProjectHelper antProjectHelper; + private ReferenceHelper refHelper; + private SEPluginProjectCustomizerModel uiModel; + private List categories; + private ProjectCustomizer.CategoryComponentProvider panelProvider; + private static Map project2Dialog = new HashMap(); + + public SEPluginProjectCustomizerProvider(Project project, AntProjectHelper antProjectHelper, ReferenceHelper refHelper) { + this.project = project; + this.refHelper = refHelper; + this.antProjectHelper = antProjectHelper; + } + + public void showCustomizer() { + showCustomizer(null); + } + + public void showCustomizer(String preselectedCategory) { + showCustomizer(preselectedCategory, null); + } + + public void showCustomizer(String preselectedCategory, String preselectedSubCategory) { + + Dialog dialog = project2Dialog.get(project); + if (dialog != null) { + dialog.setVisible(true); + return; + } else { + SEPluginProjectCustomizerModel model = new SEPluginProjectCustomizerModel(project, antProjectHelper, refHelper); + init(model); + + OptionListener listener = new OptionListener(project, uiModel); + + if (preselectedCategory != null && preselectedSubCategory != null) { + for (ProjectCustomizer.Category category : categories) { + if (preselectedCategory.equals(category.getName())) { + JComponent component = panelProvider.create(category); + if (component instanceof SubCategoryProvider) { + ((SubCategoryProvider) component).showSubCategory(preselectedSubCategory); + } + break; + } + } + } + dialog = ProjectCustomizer.createCustomizerDialog( + categories.toArray(new ProjectCustomizer.Category[categories.size()]), + panelProvider, preselectedCategory, listener, null); + dialog.addWindowListener(listener); + dialog.setTitle(MessageFormat.format(NbBundle.getMessage(SEPluginProjectCustomizerProvider.class, "LBL_Customizer_Title"), new Object[]{ProjectUtils.getInformation(project).getDisplayName()})); + + project2Dialog.put(project, dialog); + dialog.setVisible(true); + } + } + + private void init(SEPluginProjectCustomizerModel uiModel) { + + this.uiModel = uiModel; + categories = new ArrayList(); + panelProvider = new PanelProvider(createCategoriesMap()); + } + + /** + * Getter for categories + */ + protected List getCategories() { + return categories; + } + + /** + * This api is called when showCustomizer is invoked and if customizer + * provider is not fully initialized. The default implementation creates + * Project Reference and XML Catalog Categories. Subclasses can override + * this and may or may not call super depending upon, the categories are + * desired in project customizer. + */ + protected Map createCategoriesMap() { + + ResourceBundle bundle = NbBundle.getBundle(SEPluginProjectCustomizerProvider.class); + + ProjectCustomizer.Category generalNode = ProjectCustomizer.Category.create( + GENERAL, + bundle.getString("LBL_Config_General"), // NOI18N + null, + (ProjectCustomizer.Category[]) null); + ProjectCustomizer.Category packageNode = ProjectCustomizer.Category.create( + PACKAGE, + bundle.getString("LBL_Config_Package"), // NOI18N + null, + (ProjectCustomizer.Category[]) null); + /* //TODO: add new category if required + ProjectCustomizer.Category compileNode = ProjectCustomizer.Category.create( + COMPILE, + bundle.getString( "LBL_Config_Compile" ), // NOI18N + null, + (ProjectCustomizer.Category[])null); + */ + ProjectCustomizer.Category[] buildCategories = new ProjectCustomizer.Category[]{packageNode}; + // TODO: add other categories to build if required. + // buildCategories = new ProjectCustomizer.Category[] {compileNode, packageNode }; + ProjectCustomizer.Category buildCategoriesNode = ProjectCustomizer.Category.create( + BUILD_CATEGORIES, + bundle.getString("LBL_Config_BuildCategories"), // NOI18N + null, + buildCategories); + + getCategories().add(generalNode); + getCategories().add(buildCategoriesNode); + + Map panels = + new HashMap(); + + panels.put(generalNode, new CustomizerGeneral(uiModel)); + panels.put(packageNode, new CustomizerPackage(uiModel)); + // panels.put(compileNode, new CustomizerCompile(uiModel)); + + return panels; + } + + /** + * CategoryComponentProvider provider class. It stores categories and there + * corresponding UI in a map. An instance of PanelProvider is stored in + * CustomizerProviderImpl instance + */ + private static class PanelProvider implements ProjectCustomizer.CategoryComponentProvider { + + private JPanel EMPTY_PANEL = new JPanel(); + private Map panels; + + PanelProvider(Map panels) { + this.panels = panels; + } + + public JComponent create(ProjectCustomizer.Category category) { + JComponent panel = panels.get(category); + return panel == null ? EMPTY_PANEL : panel; + } + } + + /** + * Listens to the actions on the Customizer's option buttons + */ + private class OptionListener extends WindowAdapter implements ActionListener { + + private Project project; + private SEPluginProjectCustomizerModel uiModel; + + OptionListener(Project project, SEPluginProjectCustomizerModel uiModel) { + this.project = project; + this.uiModel = uiModel; + } + + // Listening to OK button ---------------------------------------------- + public void actionPerformed(ActionEvent e) { + // Store the properties into project + this.uiModel.save(); + // Close & dispose the the dialog + Dialog dialog = project2Dialog.get(project); + if (dialog != null) { + dialog.setVisible(false); + dialog.dispose(); + } + } + + // Listening to window events ------------------------------------------ + public void windowClosed(WindowEvent e) { + project2Dialog.remove(project); + } + + public void windowClosing(WindowEvent e) { + //Dispose the dialog otherwsie the {@link WindowAdapter#windowClosed} + //may not be called + Dialog dialog = project2Dialog.get(project); + if (dialog != null) { + dialog.setVisible(false); + dialog.dispose(); + } + } + } + + public static interface SubCategoryProvider { + + public void showSubCategory(String name); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/Bundle.properties new file mode 100644 index 000000000..aacefb0e0 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/Bundle.properties @@ -0,0 +1,16 @@ +LBL_Fix_Broken_Links_Action=Resolve Reference Problems... + +#Actions +LBL_CleanAction_Name=Clean Project +LBL_BuildAction_Name=Build Project +LBL_RebuildAction_Name=Clean and Build Project +LBL_RunAction_Name=Run Project +LBL_DebugAction_Name=Debug Project +LBL_JavadocAction_Name=Generate Javadoc for Project +LBL_TestAction_Name=Test Component +LBL_Properties_Action=Properties +LBL_AddProject_Action=Add Project... +LBL_AddLibrary_Action=Add Library... +LBL_AddFolder_Action=Add JAR/Folder... + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/SEPluginProjectNode.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/SEPluginProjectNode.java new file mode 100644 index 000000000..f756d9081 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/node/SEPluginProjectNode.java @@ -0,0 +1,350 @@ +/* + * SEPluginProjectNode.java + * + */ +package net.openesb.component.${artifactId}.project.node; + +import java.awt.event.ActionEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.ResourceBundle; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.JSeparator; +import org.netbeans.api.project.Project; +import org.netbeans.api.project.ProjectUtils; +import net.openesb.component.${artifactId}.project.SEPluginProjectProperties; +import org.netbeans.spi.java.project.support.ui.BrokenReferencesSupport; +import org.netbeans.spi.project.ActionProvider; +import org.netbeans.spi.project.SubprojectProvider; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.support.ant.PropertyEvaluator; +import org.netbeans.spi.project.support.ant.ReferenceHelper; +import org.netbeans.spi.project.ui.support.CommonProjectActions; +import org.netbeans.spi.project.ui.support.DefaultProjectOperations; +import org.netbeans.spi.project.ui.support.ProjectSensitiveActions; +import org.openide.actions.FindAction; +import org.openide.filesystems.FileAttributeEvent; +import org.openide.filesystems.FileChangeListener; +import org.openide.filesystems.FileEvent; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileRenameEvent; +import org.openide.loaders.DataObject; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.FilterNode; +import org.openide.nodes.Node; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.actions.SystemAction; +import org.openide.util.lookup.Lookups; + +/** + * + * @author chikkala + */ +public class SEPluginProjectNode extends AbstractNode { + + private Project project; + private AntProjectHelper helper; + private PropertyEvaluator evaluator; + private SubprojectProvider spp; + private ReferenceHelper resolver; + private Action brokenLinksAction; + private boolean broken; + + public SEPluginProjectNode(Project project, AntProjectHelper helper, PropertyEvaluator evaluator, SubprojectProvider spp, ReferenceHelper resolver) { + super(new SEPluginProjectNodeChildren(project, helper, evaluator), Lookups.singleton(project)); + setIconBaseWithExtension(SEPluginProjectProperties.SE_PLUGIN_PROJECT_ICON_PATH); + super.setName(ProjectUtils.getInformation(project).getDisplayName()); + + this.project = project; + assert project != null; + this.helper = helper; + assert helper != null; + this.evaluator = evaluator; + assert evaluator != null; + this.spp = spp; + assert spp != null; + this.resolver = resolver; + + if (hasBrokenLinks(helper, resolver)) { + broken = true; + brokenLinksAction = new BrokenLinksAction(); + } + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + // TODO: new HelpCtx("se_deploy_plugin_project_about"); // NOI18N + } + + @Override + public Action[] getActions(boolean context) { + if (context) { + return super.getActions(true); + } else { + return getAdditionalActions(); + } + } + + @Override + public boolean canRename() { + return true; + } + + @Override + public void setName(String s) { + DefaultProjectOperations.performDefaultRenameOperation(project, s); + } + + private String[] getBreakableProperties() { + String[] breakableProps = new String[0]; + return breakableProps; + } + + public boolean hasBrokenLinks(AntProjectHelper helper, ReferenceHelper resolver) { + return BrokenReferencesSupport.isBroken(helper, resolver, getBreakableProperties(), new String[]{SEPluginProjectProperties.DEFAULT_PLATFORM}); + } + + private Action[] getAdditionalActions() { + + ResourceBundle bundle = NbBundle.getBundle(SEPluginProjectNode.class); + + List actions = new ArrayList(); + + actions.add(CommonProjectActions.newFileAction()); + actions.add(null); + actions.add(ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_BUILD, bundle.getString("LBL_BuildAction_Name"), null)); // NOI18N + actions.add(ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_REBUILD, bundle.getString("LBL_RebuildAction_Name"), null)); // NOI18N + actions.add(ProjectSensitiveActions.projectCommandAction(ActionProvider.COMMAND_CLEAN, bundle.getString("LBL_CleanAction_Name"), null)); // NOI18N + //TODO: add additional plugin specific actions + actions.add(null); + actions.add(CommonProjectActions.setAsMainProjectAction()); + actions.add(CommonProjectActions.openSubprojectsAction()); + actions.add(CommonProjectActions.closeProjectAction()); + actions.add(null); + actions.add(CommonProjectActions.renameProjectAction()); + actions.add(CommonProjectActions.moveProjectAction()); + actions.add(CommonProjectActions.copyProjectAction()); + actions.add(CommonProjectActions.deleteProjectAction()); + actions.add(null); + actions.add(SystemAction.get(FindAction.class)); + // add actions from layer filesystem configuration + addFromLayers(actions, "Projects/Actions"); //NOI18N + actions.add(null); + actions.add(brokenLinksAction); + actions.add(CommonProjectActions.customizeProjectAction()); + + return actions.toArray(new Action[actions.size()]); + } + + private void addFromLayers(List actions, String path) { + Lookup look = Lookups.forPath(path); + for (Object next : look.lookupAll(Object.class)) { + if (next instanceof Action) { + actions.add((Action) next); + } else if (next instanceof JSeparator) { + actions.add(null); + } + } + } + + /** + * This action is created only when project has broken references. Once + * these are resolved the action is disabled. + */ + private class BrokenLinksAction extends AbstractAction implements PropertyChangeListener { + + public BrokenLinksAction() { + evaluator.addPropertyChangeListener(this); + putValue(Action.NAME, NbBundle.getMessage(SEPluginProjectNode.class, "LBL_Fix_Broken_Links_Action")); + } + + public void actionPerformed(ActionEvent e) { + /* + BrokenReferencesSupport.showCustomizer(helper, resolver, BREAKABLE_PROPERTIES, new String[]{SEPluginProjectProperties.DEFAULT_PLATFORM}); + if (!hasBrokenLinks(helper, resolver)) { + disable(); + } + */ + // do nothing... + } + + public void propertyChange(PropertyChangeEvent evt) { + if (!broken) { + disable(); + return; + } + broken = hasBrokenLinks(helper, resolver); + if (!broken) { + disable(); + } + } + + private void disable() { + broken = false; + setEnabled(false); + evaluator.removePropertyChangeListener(this); + fireIconChange(); + fireOpenedIconChange(); + } + } + + private static final class SEPluginProjectNodeChildren extends Children.Keys implements FileChangeListener { + + private static final String KEY_SU_JBI_XML = "SU_JBI_XML_Key"; // NOI18N + private static final String KEY_SOURCE_DIR = "SourceDirKey"; // NOI18N + private Project project; + private AntProjectHelper helper; + private PropertyEvaluator evaluator; + + public SEPluginProjectNodeChildren(Project project, AntProjectHelper helper, PropertyEvaluator evaluator) { + this.project = project; + assert project != null; + this.helper = helper; + assert helper != null; + this.evaluator = evaluator; + assert evaluator != null; + } + + private FileObject getSourceFolder() { + String srcDir = helper.getStandardPropertyEvaluator().getProperty(SEPluginProjectProperties.SRC_DIR); // NOI18N + return helper.resolveFileObject(srcDir); + } + + private FileObject getJbiXml(FileObject srcDirFO) { + FileObject jbiXmlFO = null; + if (srcDirFO == null) { + return null; + } + jbiXmlFO = srcDirFO.getFileObject(SEPluginProjectProperties.SU_JBI_XML_PATH); + if (jbiXmlFO == null) { + // create default jbi.xml + try { + jbiXmlFO = SEPluginProjectProperties.createDefaultSUDescriptor(srcDirFO); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return jbiXmlFO; + } + + @Override + @SuppressWarnings("unchecked") + protected void addNotify() { + super.addNotify(); + FileObject projectDirFO = project.getProjectDirectory(); + if (projectDirFO != null) { + projectDirFO.addFileChangeListener(this); + } + FileObject srcDirFO = getSourceFolder(); + if (srcDirFO != null) { + srcDirFO.addFileChangeListener(this); + } + setKeys(getKeys()); + } + + @Override + @SuppressWarnings("unchecked") + protected void removeNotify() { + + setKeys(Collections.emptySet()); + + FileObject projectDirFO = project.getProjectDirectory(); + if (projectDirFO != null) { + projectDirFO.removeFileChangeListener(this); + } + FileObject srcDirFO = getSourceFolder(); + if (srcDirFO != null) { + srcDirFO.removeFileChangeListener(this); + } + + super.removeNotify(); + } + + private Collection getKeys() { + //when the project is deleted externally do not try to create children, the source groups + //are not valid + if (project.getProjectDirectory() == null || !project.getProjectDirectory().isValid()) { + return Collections.emptyList(); + } + + List result = new ArrayList(); + + FileObject srcDirFO = null; + FileObject jbiXmlFO = null; + + srcDirFO = getSourceFolder(); + if (srcDirFO != null) { + jbiXmlFO = getJbiXml(srcDirFO); + } + if (jbiXmlFO != null) { + result.add(KEY_SU_JBI_XML); + } + + if (srcDirFO != null) { + result.add(KEY_SOURCE_DIR); + } + + //TODO: add any other top level node keys here. + return result; + } + + protected Node createNode(FileObject fo) { + try { + DataObject dataObj = DataObject.find(fo); + return new FilterNode(dataObj.getNodeDelegate()); + } catch (Exception ex) { + return null; + } + } + + protected Node[] createNodes(Object key) { + List newNodes = new ArrayList(); + if (KEY_SU_JBI_XML.equals(key)) { + FileObject srcDirFO = getSourceFolder(); + FileObject jbiXmlFO = getJbiXml(srcDirFO); + newNodes.add(createNode(jbiXmlFO)); + } else if (KEY_SOURCE_DIR.equals(key)) { + FileObject srcDirFO = getSourceFolder(); + newNodes.add(createNode(srcDirFO)); + } + return newNodes.toArray(new Node[newNodes.size()]); + } + + @SuppressWarnings("unchecked") + public void fileFolderCreated(FileEvent evt) { + setKeys(getKeys()); + } + + @SuppressWarnings("unchecked") + public void fileDataCreated(FileEvent evt) { + setKeys(getKeys()); + } + + public void fileChanged(FileEvent evt) { + + } + + @SuppressWarnings("unchecked") + public void fileDeleted(FileEvent evt) { + setKeys(getKeys()); + } + + @SuppressWarnings("unchecked") + public void fileRenamed(FileRenameEvent evt) { + setKeys(getKeys()); + } + + public void fileAttributeChanged(FileAttributeEvent evt) { + + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build-impl.xsl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build-impl.xsl new file mode 100644 index 000000000..9adad65fd --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build-impl.xsl @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + default + .. + + + jar + Build whole project. + + + + ====================== + INITIALIZATION SECTION + ====================== + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + -pre-init + + + + + -pre-init,-init-private + + + + + -pre-init,-init-private,-init-user + + + + + -pre-init,-init-private,-init-user,-init-project + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + -pre-init,-init-private,-init-user,-init-project,-do-init + Must set src.dir + Must set build.dir + Must set jbi.su.name + Must set jbi.su.zip + + + + -pre-init,-init-private,-init-user,-init-project,-do-init,-post-init,-init-check + + + + =================== + COMPILATION SECTION + =================== + + + + init + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,-pre-pre-compile,-pre-compile + + + + + + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,-pre-pre-compile,-pre-compile,-do-compile,-post-compile + Compile project. + + + + ==================== + JAR BUILDING SECTION + ==================== + + + + init + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,compile,-pre-pre-jar,-pre-jar + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,compile,-pre-jar,-do-jar,-post-jar + Build JAR. + + + + init,jar + + + + init,jar + + + + =============== + CLEANUP SECTION + =============== + + + + init + + + + + + Empty placeholder for easier customization. + You can override this target in the ../build.xml file. + + + + init,-do-clean,-post-clean + Clean build products. + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build.xsl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build.xsl new file mode 100644 index 000000000..288568af6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/build.xsl @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + You may freely edit this file. See commented blocks below for + some examples of how to customize the build. + (If you delete it and reopen the project it will be recreated.) + + + + + + + default + . + Builds, tests, and runs the project + . + + + + + + + + + + For list of available properties check the imported + nbproject/build-impl.xml file. + + + Another way to customize the build is by overriding existing main targets. + The targets of interest are: + + -init-macrodef-javac: defines macro for javac compilation + -init-macrodef-junit: defines macro for junit execution + -init-macrodef-debug: defines macro for class debugging + -init-macrodef-java: defines macro for class execution + -do-jar-with-manifest: JAR building (if you are using a manifest) + -do-jar-without-manifest: JAR building (if you are not using a manifest) + run: execution of project + -javadoc-build: Javadoc generation + test-report: JUnit report generation + + An example of overriding the target for project execution could look like this: + + + + + + + + Notice that the overridden target depends on the jar target and not only on + the compile target as the regular run target does. Again, for a list of available + properties which you can use, check the target you are overriding in the + nbproject/build-impl.xml file. + + ]]> + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/projectIcon.png b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/projectIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..efb923b40690516038fa763ef9cca96a5aa6dde7 GIT binary patch literal 450 zcmV;z0X_bSP)3ct?C0nwvjtF2 zxf3AxiS1oC5uM3w0q&UdG#j>VcNVO(6x;#NH}t>IzOtWSgXJ*_)V*fj2d4AExy{kv zh#hG2IZw0Y*d+mbU0OqQ9F^BcbRR91007*qoM6N<$f_vG>p#T5? literal 0 HcmV?d00001 diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/se-jbi-module.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/se-jbi-module.xml new file mode 100644 index 000000000..01e9ab043 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/resources/se-jbi-module.xml @@ -0,0 +1,3 @@ + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/Bundle.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/Bundle.properties new file mode 100644 index 000000000..56d0f658f --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/Bundle.properties @@ -0,0 +1,9 @@ +LBL_CreateProjectStep=Name and Location + +LBL_ProjectName=Project &Name: + +LBL_ProjectLocation=Project &Location: + +LBL_ProjectFolder=Project &Folder: + +LBL_Browse=Br&owse... diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectDescription.html b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectDescription.html new file mode 100644 index 000000000..21e9e6bdc --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectDescription.html @@ -0,0 +1,8 @@ + + + + + + Service Engine deploment plugin project + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardIterator.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardIterator.java new file mode 100644 index 000000000..5da0b6429 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardIterator.java @@ -0,0 +1,238 @@ +/* + * SEPluginProjectWizardIterator.java + */ +package net.openesb.component.${artifactId}.project.wizard; + +import java.awt.Component; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.Set; +import javax.swing.JComponent; +import javax.swing.event.ChangeListener; +import net.openesb.component.${artifactId}.project.SEPluginProjectGenerator; +import net.openesb.component.${artifactId}.project.SEPluginProjectProperties; +import org.netbeans.spi.project.support.ant.AntProjectHelper; +import org.netbeans.spi.project.ui.support.ProjectChooser; +import org.netbeans.spi.project.ui.templates.support.Templates; +import org.openide.WizardDescriptor; +import org.openide.filesystems.FileLock; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; +import org.openide.filesystems.Repository; +import org.openide.loaders.DataFolder; +import org.openide.loaders.DataObject; +import org.openide.util.NbBundle; + +public class SEPluginProjectWizardIterator implements WizardDescriptor.InstantiatingIterator { + + public final static String PROJECT_DIR = "projdir"; + public final static String PROJECT_NAME = "name"; + public final static String DEF_PROJECT_NAME_VALUE = "JBIModule"; + private int index; + private WizardDescriptor.Panel[] panels; + private WizardDescriptor wiz; + + public SEPluginProjectWizardIterator() { + } + + public static SEPluginProjectWizardIterator createIterator() { + return new SEPluginProjectWizardIterator(); + } + + private WizardDescriptor.Panel[] createPanels() { + return new WizardDescriptor.Panel[]{ + new SEPluginProjectWizardPanel() + }; + } + + private String[] createSteps() { + return new String[]{ + NbBundle.getMessage(SEPluginProjectWizardIterator.class, "LBL_CreateProjectStep") + }; + } + + public Set instantiate(/*ProgressHandle handle*/) throws IOException { + + Set resultSet = createSEDeployPluginProject(); + // save the current projects folder + File dirF = FileUtil.normalizeFile((File) wiz.getProperty(PROJECT_DIR)); + File parent = dirF.getParentFile(); + if (parent != null && parent.exists()) { + ProjectChooser.setProjectsFolder(parent); + } + return resultSet; + } + + public void initialize(WizardDescriptor wiz) { + this.wiz = wiz; + + try { + FileObject templateFO = Templates.getTemplate(wiz); + DataObject templateDO = DataObject.find(templateFO); + this.wiz.putProperty(PROJECT_NAME, templateDO.getName()); + } catch (Exception ex) { + this.wiz.putProperty(PROJECT_NAME, DEF_PROJECT_NAME_VALUE); + } + + index = 0; + panels = createPanels(); + // Make sure list of steps is accurate. + String[] steps = createSteps(); + for (int i = 0; i < panels.length; i++) { + Component c = panels[i].getComponent(); + if (steps[i] == null) { + // Default step name to component name of panel. + // Mainly useful for getting the name of the target + // chooser to appear in the list of steps. + steps[i] = c.getName(); + } + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + // Step #. + jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); + // Step name (actually the whole list for reference). + jc.putClientProperty("WizardPanel_contentData", steps); + } + } + } + + public void uninitialize(WizardDescriptor wiz) { + this.wiz.putProperty(PROJECT_DIR, null); + this.wiz.putProperty(PROJECT_NAME, null); + this.wiz = null; + panels = null; + } + + public String name() { + return MessageFormat.format("{0} of {1}", + new Object[]{new Integer(index + 1), new Integer(panels.length)}); + } + + public boolean hasNext() { + return index < panels.length - 1; + } + + public boolean hasPrevious() { + return index > 0; + } + + public void nextPanel() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + index++; + } + + public void previousPanel() { + if (!hasPrevious()) { + throw new NoSuchElementException(); + } + index--; + } + + public WizardDescriptor.Panel current() { + return panels[index]; + } + + // If nothing unusual changes in the middle of the wizard, simply: + public final void addChangeListener(ChangeListener l) { + } + + public final void removeChangeListener(ChangeListener l) { + } + + protected Set createSEDeployPluginProject() throws IOException { + + Set resultSet = new LinkedHashSet(); + + File prjDirFile = FileUtil.normalizeFile((File) wiz.getProperty(PROJECT_DIR)); + String prjName = (String) wiz.getProperty(PROJECT_NAME); + + SEPluginProjectGenerator prjGenerator = new SEPluginProjectGenerator(); + AntProjectHelper h = prjGenerator.createProject(prjDirFile, prjName); + + FileObject projectDirFO = h.getProjectDirectory(); + resultSet.add(projectDirFO); + + Set defArtifacts = createProjectSpecificArtifacts(projectDirFO); + resultSet.addAll(defArtifacts); + + return resultSet; + } + + private FileObject copyResource(FileObject dirFO, String name, String resourcePath) throws IOException { + FileObject dataFO = null; + FileLock outLock = null; + OutputStream outS = null; + InputStream inS = null; + + try { + inS = this.getClass().getResourceAsStream(resourcePath); + dataFO = FileUtil.createData(dirFO, name); + outLock = dataFO.lock(); + outS = dataFO.getOutputStream(outLock); + FileUtil.copy(inS, outS); + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + if (inS != null) { + try { + inS.close(); + } catch (Exception ex) { + //ingore + } + } + if (outS != null) { + try { + outS.close(); + } catch (Exception ex) { + //ingore + } + } + if (outLock != null) { + outLock.releaseLock(); + } + } + return dataFO; + } + + protected Set createProjectSpecificArtifacts(FileObject projectDirFO) throws IOException { + Set resultSet = new LinkedHashSet(); + //TODO: create any default service unit artifacts needed. + try { + + FileObject srcDirFO = projectDirFO.getFileObject(SEPluginProjectProperties.SRC_DIR_VALUE); + resultSet.add(srcDirFO); + + // create service unit jbi descriptor + FileObject metaInfDirFO = FileUtil.createFolder(srcDirFO, "META-INF"); + FileObject jbiXmlFO = copyResource(metaInfDirFO, "jbi.xml", "resources/jbi.xml"); + resultSet.add(jbiXmlFO); + + // create any service unit artifacts such as wsdl files and configuration files + + // list of su artifacts to be created from the resources directory + String[] suArtifacts = {"xsltmap.properties","goodbye.xsl","hello.xsl","Greetings.wsdl"}; + + for (String suArtifact : suArtifacts) { + FileObject suArtifactFO = copyResource(srcDirFO, suArtifact, "resources/" + suArtifact); + resultSet.add(suArtifactFO); + } + + //TODO: add any addtional default service unit artifacts here. + // FileObject suArtifactFO = copyResource(srcDirFO, "su-artifact.xml", "resources/su-artifact.xml"); + // resultSet.add(suArtifactFO); + + } catch (Exception ex) { + ex.printStackTrace(); + } + return resultSet; + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanel.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanel.java new file mode 100644 index 000000000..b742f7e67 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanel.java @@ -0,0 +1,93 @@ +/* + * SEPluginProjectWizardPanel.java + */ +package net.openesb.component.${artifactId}.project.wizard; + +import java.awt.Component; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.WizardValidationException; +import org.openide.util.HelpCtx; +import org.openide.util.NbBundle; + +/** + * Panel just asking for basic info. + */ +public class SEPluginProjectWizardPanel implements WizardDescriptor.Panel, + WizardDescriptor.ValidatingPanel, WizardDescriptor.FinishablePanel { + + private WizardDescriptor wizardDescriptor; + private SEPluginProjectWizardPanelVisual component; + + /** + * Creates a new instance of templateWizardPanel + */ + public SEPluginProjectWizardPanel() { + } + + public Component getComponent() { + if (component == null) { + component = new SEPluginProjectWizardPanelVisual(this); + component.setName(NbBundle.getMessage(SEPluginProjectWizardPanel.class, "LBL_CreateProjectStep")); + } + return component; + } + + public HelpCtx getHelp() { + return new HelpCtx(SEPluginProjectWizardPanel.class); + } + + public boolean isValid() { + getComponent(); + return component.valid(wizardDescriptor); + } + private final Set/**/ listeners = new HashSet(1); // or can use ChangeSupport in NB 6.0 + + @SuppressWarnings("unchecked") + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + @SuppressWarnings("unchecked") + protected final void fireChangeEvent() { + Iterator it; + synchronized (listeners) { + it = new HashSet(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + ((ChangeListener) it.next()).stateChanged(ev); + } + } + + public void readSettings(Object settings) { + wizardDescriptor = (WizardDescriptor) settings; + component.read(wizardDescriptor); + } + + public void storeSettings(Object settings) { + WizardDescriptor d = (WizardDescriptor) settings; + component.store(d); + } + + public boolean isFinishPanel() { + return true; + } + + public void validate() throws WizardValidationException { + getComponent(); + component.validate(wizardDescriptor); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.form b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.form new file mode 100644 index 000000000..b3238405d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.form @@ -0,0 +1,120 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.java new file mode 100644 index 000000000..d16d84ddb --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/SEPluginProjectWizardPanelVisual.java @@ -0,0 +1,259 @@ +/* + * SEPluginProjectWizardPanelVisual.java + */ +package net.openesb.component.${artifactId}.project.wizard; + +import java.io.File; +import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.text.Document; +import org.netbeans.spi.project.ui.support.ProjectChooser; +import org.openide.WizardDescriptor; +import org.openide.WizardValidationException; +import org.openide.filesystems.FileUtil; + +public class SEPluginProjectWizardPanelVisual extends JPanel implements DocumentListener { + + public static final String PROP_PROJECT_NAME = "projectName"; + private SEPluginProjectWizardPanel panel; + + public SEPluginProjectWizardPanelVisual(SEPluginProjectWizardPanel panel) { + initComponents(); + this.panel = panel; + // Register listener on the textFields to make the automatic updates + projectNameTextField.getDocument().addDocumentListener(this); + projectLocationTextField.getDocument().addDocumentListener(this); + } + + public String getProjectName() { + return this.projectNameTextField.getText(); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + projectNameLabel = new javax.swing.JLabel(); + projectNameTextField = new javax.swing.JTextField(); + projectLocationLabel = new javax.swing.JLabel(); + projectLocationTextField = new javax.swing.JTextField(); + browseButton = new javax.swing.JButton(); + createdFolderLabel = new javax.swing.JLabel(); + createdFolderTextField = new javax.swing.JTextField(); + + projectNameLabel.setLabelFor(projectNameTextField); + org.openide.awt.Mnemonics.setLocalizedText(projectNameLabel, org.openide.util.NbBundle.getMessage(SEPluginProjectWizardPanelVisual.class, "LBL_ProjectName")); // NOI18N + + projectLocationLabel.setLabelFor(projectLocationTextField); + org.openide.awt.Mnemonics.setLocalizedText(projectLocationLabel, org.openide.util.NbBundle.getMessage(SEPluginProjectWizardPanelVisual.class, "LBL_ProjectLocation")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(browseButton, org.openide.util.NbBundle.getMessage(SEPluginProjectWizardPanelVisual.class, "LBL_Browse")); // NOI18N + browseButton.setActionCommand("BROWSE"); + browseButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + browseButtonActionPerformed(evt); + } + }); + + createdFolderLabel.setLabelFor(createdFolderTextField); + org.openide.awt.Mnemonics.setLocalizedText(createdFolderLabel, org.openide.util.NbBundle.getMessage(SEPluginProjectWizardPanelVisual.class, "LBL_ProjectFolder")); // NOI18N + + createdFolderTextField.setEditable(false); + + org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(projectNameLabel) + .add(projectLocationLabel) + .add(createdFolderLabel)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(org.jdesktop.layout.GroupLayout.TRAILING, projectNameTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.TRAILING, projectLocationTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE) + .add(org.jdesktop.layout.GroupLayout.TRAILING, createdFolderTextField, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(browseButton) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) + .add(layout.createSequentialGroup() + .addContainerGap() + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(projectNameLabel) + .add(projectNameTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(projectLocationLabel) + .add(projectLocationTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) + .add(browseButton)) + .addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED) + .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE) + .add(createdFolderLabel) + .add(createdFolderTextField, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(213, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private void browseButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_browseButtonActionPerformed + String command = evt.getActionCommand(); + if ("BROWSE".equals(command)) { + JFileChooser chooser = new JFileChooser(); + FileUtil.preventFileChooserSymlinkTraversal(chooser, null); + chooser.setDialogTitle("Select Project Location"); + chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + String path = this.projectLocationTextField.getText(); + if (path.length() > 0) { + File f = new File(path); + if (f.exists()) { + chooser.setSelectedFile(f); + } + } + if (JFileChooser.APPROVE_OPTION == chooser.showOpenDialog(this)) { + File projectDir = chooser.getSelectedFile(); + projectLocationTextField.setText(FileUtil.normalizeFile(projectDir).getAbsolutePath()); + } + panel.fireChangeEvent(); + } + + }//GEN-LAST:event_browseButtonActionPerformed + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton browseButton; + private javax.swing.JLabel createdFolderLabel; + private javax.swing.JTextField createdFolderTextField; + private javax.swing.JLabel projectLocationLabel; + private javax.swing.JTextField projectLocationTextField; + private javax.swing.JLabel projectNameLabel; + private javax.swing.JTextField projectNameTextField; + // End of variables declaration//GEN-END:variables + + public void addNotify() { + super.addNotify(); + //same problem as in 31086, initial focus on Cancel button + projectNameTextField.requestFocus(); + } + + boolean valid(WizardDescriptor wizardDescriptor) { + + if (projectNameTextField.getText().length() == 0) { + wizardDescriptor.putProperty("WizardPanel_errorMessage", + "Project Name is not a valid folder name."); + return false; // Display name not specified + } + File f = FileUtil.normalizeFile(new File(projectLocationTextField.getText()).getAbsoluteFile()); + if (!f.isDirectory()) { + String message = "Project Folder is not a valid path."; + wizardDescriptor.putProperty("WizardPanel_errorMessage", message); + return false; + } + final File destFolder = FileUtil.normalizeFile(new File(createdFolderTextField.getText()).getAbsoluteFile()); + + File projLoc = destFolder; + while (projLoc != null && !projLoc.exists()) { + projLoc = projLoc.getParentFile(); + } + if (projLoc == null || !projLoc.canWrite()) { + wizardDescriptor.putProperty("WizardPanel_errorMessage", + "Project Folder cannot be created."); + return false; + } + + if (FileUtil.toFileObject(projLoc) == null) { + String message = "Project Folder is not a valid path."; + wizardDescriptor.putProperty("WizardPanel_errorMessage", message); + return false; + } + + File[] kids = destFolder.listFiles(); + if (destFolder.exists() && kids != null && kids.length > 0) { + // Folder exists and is not empty + wizardDescriptor.putProperty("WizardPanel_errorMessage", + "Project Folder already exists and is not empty."); + return false; + } + wizardDescriptor.putProperty("WizardPanel_errorMessage", ""); + return true; + } + + void store(WizardDescriptor d) { + String name = projectNameTextField.getText().trim(); + String folder = createdFolderTextField.getText().trim(); + + d.putProperty("projdir", new File(folder)); + d.putProperty("name", name); + } + + void read(WizardDescriptor settings) { + File projectLocation = (File) settings.getProperty(SEPluginProjectWizardIterator.PROJECT_DIR); + if (projectLocation == null || projectLocation.getParentFile() == null || !projectLocation.getParentFile().isDirectory()) { + projectLocation = ProjectChooser.getProjectsFolder(); + } else { + projectLocation = projectLocation.getParentFile(); + } + this.projectLocationTextField.setText(projectLocation.getAbsolutePath()); + + String projectName = (String) settings.getProperty(SEPluginProjectWizardIterator.PROJECT_NAME); + if (projectName == null) { + projectName = SEPluginProjectWizardIterator.DEF_PROJECT_NAME_VALUE; + } + this.projectNameTextField.setText(projectName); + this.projectNameTextField.selectAll(); + } + + void validate(WizardDescriptor d) throws WizardValidationException { + // nothing to validate + } + + // Implementation of DocumentListener -------------------------------------- + public void changedUpdate(DocumentEvent e) { + updateTexts(e); + if (this.projectNameTextField.getDocument() == e.getDocument()) { + firePropertyChange(PROP_PROJECT_NAME, null, this.projectNameTextField.getText()); + } + } + + public void insertUpdate(DocumentEvent e) { + updateTexts(e); + if (this.projectNameTextField.getDocument() == e.getDocument()) { + firePropertyChange(PROP_PROJECT_NAME, null, this.projectNameTextField.getText()); + } + } + + public void removeUpdate(DocumentEvent e) { + updateTexts(e); + if (this.projectNameTextField.getDocument() == e.getDocument()) { + firePropertyChange(PROP_PROJECT_NAME, null, this.projectNameTextField.getText()); + } + } + + /** + * Handles changes in the Project name and project directory, + */ + private void updateTexts(DocumentEvent e) { + + Document doc = e.getDocument(); + + if (doc == projectNameTextField.getDocument() || doc == projectLocationTextField.getDocument()) { + // Change in the project name + + String projectName = projectNameTextField.getText(); + String projectFolder = projectLocationTextField.getText(); + + //if (projectFolder.trim().length() == 0 || projectFolder.equals(oldName)) { + createdFolderTextField.setText(projectFolder + File.separatorChar + projectName); + //} + + } + panel.fireChangeEvent(); // Notify that the panel changed + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/Greetings.wsdl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/Greetings.wsdl new file mode 100644 index 000000000..756417abf --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/Greetings.wsdl @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/goodbye.xsl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/goodbye.xsl new file mode 100644 index 000000000..3259f2f3a --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/goodbye.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + Goodbye + ! Have a great time. + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/hello.xsl b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/hello.xsl new file mode 100644 index 000000000..d6794cbf8 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/hello.xsl @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + Hello + ! + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/jbi.xml new file mode 100644 index 000000000..6c6757d3d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/jbi.xml @@ -0,0 +1,14 @@ + + + + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/xsltmap.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/xsltmap.properties new file mode 100644 index 000000000..06e4b6631 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/main/resources/archetype-resources/src/net/openesb/component/__artifactId__/project/wizard/resources/xsltmap.properties @@ -0,0 +1,28 @@ +# properties will be used to find the xslt file that will be used for invoking a +# service operation. +# The "xsltmap.properties" file should contain two types of properties +# 1. for namespace prefix to namespaceURI map that starts with "xmlns." prefix like +# "xmlns.tns-prefix=http://www.sun.com/jbi/examples/sample-service/echo" +# 2. a service description to xslt file properties with syntax like +# "{tns-prefix}service-name=xslt_file_name" and +# "{tns-prefix}service-name.{tns-prefix}operation-name=xslt_file_name" and +# "{tns-prefix}service-name.{tns-prefix}interface-name.operation-name=xslt_file_name" . +# the service description property is a "." delimited tokens that represents +# a serive or interface qname and a operation name. To locate xslt file either with +# service qname or service qname and operaton or serivice qname and interface qname +# and operation, all the three properties specified above should be there for each xslt file. +# + +xmlns.greet1=http://www.sun.com/jbi/examples/sample-service/greetings/ +xmlns.greet2=http://www.sun.com/jbi/examples/sample-service/greetings/ +xmlns.greettypes=http://www.sun.com/jbi/examples/sample-service/greetings/types +# just service level default settings +{greet2}greetService=hello.xsl +# service and operation +{greet2}greetService.{greet1}sayHello=hello.xsl +# service, interface, operation +{greet2}greetService.{greet1}greetings.sayHello=hello.xsl +# service and operation +{greet2}greetService.{greet1}sayGoodbye=goodbye.xsl +# service, interface, operation +{greet2}greetService.{greet1}greetings.sayGoodbye=goodbye.xsl diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/test/resources/projects/basic/archetype.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/test/resources/projects/basic/archetype.properties new file mode 100644 index 000000000..84ab644c4 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/test/resources/projects/basic/archetype.properties @@ -0,0 +1,5 @@ +#Tue Jul 23 17:03:00 IST 2013 +package=it.pkg +version=0.1-SNAPSHOT +groupId=archetype.it +artifactId=basic diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-plugin-v2/src/test/resources/projects/basic/goal.txt b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-v2/pom.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/pom.xml new file mode 100644 index 000000000..8c4ab285d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/pom.xml @@ -0,0 +1,58 @@ + + + + + + + 4.0.0 + + open-jbi-components + service-engine-ojc-archetype + 2.3.0 + jar + + service-engine-ojc-archetype + + + + + org.apache.maven.archetype + archetype-packaging + 2.2 + + + + + + + maven-archetype-plugin + 2.2 + + + + + + Top-level Build for newse-top + + https://open-jbi-components.dev.java.net/newse-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-service-engine-v2/src/main/resources/META-INF/maven/archetype-metadata.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/META-INF/maven/archetype-metadata.xml new file mode 100644 index 000000000..594c2ab6d --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/META-INF/maven/archetype-metadata.xml @@ -0,0 +1,80 @@ + + + + + + + ${artifactId} + + + + + bld/generated-sources + + **/*.xml + + + + + + nbactions.xml + + + + + + smvn.bat + + + + + + + + src/net + + **/*.java + + + + + + nbactions.xml + + + + + + + + src + + **/*.xml + **/*.properties + + + + bld/classes + + **/*.jar + + + + + + nbactions.xml + + + + + + \ No newline at end of file diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml new file mode 100644 index 000000000..45118cf65 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/nbactions.xml @@ -0,0 +1,51 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + + + + clean + + clean + + + + build + + install + + + + test + + package + + + + rebuild + + clean + install + + + + CUSTOM-testreport + testreport + + surefire-report:report-only + + + true + + + + CUSTOM-allreports + allreports + + site + + + true + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml new file mode 100644 index 000000000..896598282 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/pom.xml @@ -0,0 +1,78 @@ + + + + build-common + open-jbi-components + 1.1 + ../../build-common + + 4.0.0 + open-jbi-components + ${componentName}-jbiadapter + ${componentName}-jbiadapter + ${version} + ${componentName}-jbiadapter description + + + + maven-antrun-plugin + + + ${artifactId}-extract-globalized-messages + process-classes + run + + + + + + + + + open-jbi-components + componentsl + + + + junit + junit + test + + + ant + ant-junit + test + + + wsdl4j + wsdl4j + 1.6.2 + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEComponentLifeCycle.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEComponentLifeCycle.java new file mode 100644 index 000000000..9b92b6f84 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEComponentLifeCycle.java @@ -0,0 +1,52 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * ProviderSEComponentLifeCycle.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 ProviderSEComponentLifeCycle extends BasicComponentLifeCycle { + + /** + * constructor + */ + public ProviderSEComponentLifeCycle(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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEEndpoint.java new file mode 100644 index 000000000..c77ba006b --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEEndpoint.java @@ -0,0 +1,101 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * ProviderSEEndpoint.java + */ +package net.openesb.component.${componentName}; + +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 javax.jbi.JBIException; +import javax.jbi.messaging.ExchangeStatus; +import javax.jbi.messaging.MessageExchange; +import javax.wsdl.Definition; + +/** + * 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. + * + * This endpoint is configured for a service provided by this component which + * can receive a xml document and apply xslt transformation and send the results + * back in a InOut message exchange to complete a service invocation on this + * endpoint. + * + * @author chikkala + */ +public class ProviderSEEndpoint extends ProviderEndpoint implements MessageExchangeListener { + + private XSLTFileLocator mXsltFileLocator; + private XSLTService mXsltService; + + /** + * Creates a new instance of XSLTProviderEndpoint + */ + public ProviderSEEndpoint(SUDescriptor.Provides provides, Definition wsdlDef, ProviderSEServiceUnit su) { + super(provides, wsdlDef, su); + } + + /** + * XSLT transformation service used in transformation of the xml documents + * received on this endpoint. + */ + public XSLTService getXSLTService() { + return this.mXsltService; + } + + /** + * returns the XSLTFileLocator object that is created to find the xslt file + * to be used for a particular service operation invocation by looking at + * the mapping file specified in the service unit that deploys this + * endpoint. + */ + public XSLTFileLocator getXSLTFileLocator() { + return this.mXsltFileLocator; + } + + @Override + public void doInit() throws JBIException { + RuntimeHelper.getLogger().info("ProviderSEEndpoint:doInit called"); + ProviderSEServiceUnit su = (ProviderSEServiceUnit) this.getServiceUnit(); + this.mXsltFileLocator = su.getXsltFileLocator(); + this.mXsltService = XSLTService.XSLTServiceImpl.getInstance(); + } + + /** + * creates the message exchange handler that will be used to process the + * message exchange received for this endpoint. + */ + @Override + public MessageExchangeHandler createMessageExchangeHandler() { + return new ProviderSEMessageExchangeHandler(this); + } + + /** + * returns the implementation of the message exchange listener which the + * MessageExchangeSupport invokes when a message exchange is received from + * delivery channel by MessageExchangeReceiver. + */ + @Override + protected MessageExchangeListener createMessageExchangeListener() { + return this; + } + + /** + * implementation of the message exchange received method of the listener. + */ + 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(); + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEInstaller.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEInstaller.java new file mode 100644 index 000000000..d49dac792 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEInstaller.java @@ -0,0 +1,34 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + /* + * ProviderSEInstaller.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 ProviderSEInstaller extends ComponentInstaller { + + /** + * Constructor to create the MyEngineInstaller. + */ + public ProviderSEInstaller() { + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEMessageExchangeHandler.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEMessageExchangeHandler.java new file mode 100644 index 000000000..fb14efbd0 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEMessageExchangeHandler.java @@ -0,0 +1,171 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * ProviderSEMessageExchangeHandler.java + * + */ +package net.openesb.component.${componentName}; + +import net.openesb.component.${componentName}.common.AbstractMessageExchangeHandler; +import net.openesb.component.${componentName}.common.RuntimeHelper; +import net.openesb.component.${componentName}.common.wsdl.WSDL11JBIWrapper; +import java.io.StringReader; +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.xml.namespace.QName; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.Source; + +/** + * This class extends the AbstractMessageExchangeHandler to implement the + * component specific message exchange processing on the provider side in a + * service engine. + * + * @author chikkala + */ +public class ProviderSEMessageExchangeHandler extends AbstractMessageExchangeHandler { + + private ProviderSEEndpoint mEndpoint; + + /** + * Creates a new instance of ProviderSEMXHandler + */ + public ProviderSEMessageExchangeHandler(ProviderSEEndpoint endpoint) { + this.mEndpoint = endpoint; + } + + 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; + Source inContent = null; + Source outContent = null; + Source faultContent = null; + String faultAsText = null; + // process in message + inContent = inMsg.getContent(); + // invoke the service operation + try { + QName opName = inOutExchange.getOperation(); + QName svcName = inOutExchange.getEndpoint().getServiceName(); + RuntimeHelper.getLogger().fine("xslt service info " + svcName + opName); + + XSLTFileLocator xsltFileLocator = this.mEndpoint.getXSLTFileLocator(); + XSLTService xsltService = this.mEndpoint.getXSLTService(); + + String xsltPath = xsltFileLocator.findXsltFile(svcName, opName); + RuntimeHelper.getLogger().fine("XsltPath " + xsltPath); + if (xsltPath == null) { + RuntimeHelper.getLogger().fine(" No XSLT File found in MAP " + + xsltFileLocator.printMap()); + } + outContent = xsltService.transform(inContent, xsltPath); + + } 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); + normalizeOutMessage(inOutExchange, 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.getDeliveryChannel().sendSync(inOutExchange, SEND_SYNC_TIMEOUT); + this.send(); + } + + private void normalizeOutMessage(MessageExchange me, NormalizedMessage normMsg, Source msgSrc) throws MessagingException { + try { + // DOMSource wrappedSource = wrapOutputMessage(me, msgSrc); + WSDL11JBIWrapper outWrapper = WSDL11JBIWrapper.createOutputWrapper( + this.mEndpoint.getWSDLOperation(me.getOperation())); + + // check if the output from the transformer is in a wrapped form + WSDL11JBIWrapper wrapper = WSDL11JBIWrapper.sourceToWrapper( + RuntimeHelper.sourceToDOMSource(msgSrc)); + if (wrapper != null) { + outWrapper.appendParts(wrapper.getParts()); + } else { + outWrapper.appendPart(RuntimeHelper.sourceToDOMSource(msgSrc)); + } + + normMsg.setContent(outWrapper.toDOMSource()); + + } catch (MessagingException ex) { + throw ex; + } catch (ParserConfigurationException ex) { + throw new MessagingException(ex); + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSERuntime.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSERuntime.java new file mode 100644 index 000000000..c13d0a78e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSERuntime.java @@ -0,0 +1,56 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * ProviderSERuntime.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 ProviderSERuntime extends ComponentRuntime { + + /** + * Creates a new instance of MyEngineRuntime + */ + public ProviderSERuntime() { + super(); + } + + /** + * overriding the parent's createComponentLifeCycle to create component + * specific component lifecycle implementation. + */ + @Override + protected ComponentLifeCycle createComponentLifeCycle() { + return new ProviderSEComponentLifeCycle(this); + } + + /** + * overrides the parent's createServiceUnitManager to create component + * specific service unit manager + */ + @Override + protected ServiceUnitManager createServiceUnitManager() { + return new ProviderSESUManager(this); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSESUManager.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSESUManager.java new file mode 100644 index 000000000..ec274e2b5 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSESUManager.java @@ -0,0 +1,49 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * ProviderSESUManager.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 ProviderSESUManager extends AbstractServiceUnitManager { + + private ProviderSERuntime mRuntime; + + /** + * Creates a new instance of ProviderSESUManager + */ + public ProviderSESUManager(ProviderSERuntime 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 ProviderSEServiceUnit(suName, suRootPath); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEServiceUnit.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEServiceUnit.java new file mode 100644 index 000000000..335d9bbd6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/ProviderSEServiceUnit.java @@ -0,0 +1,63 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * ProviderSEServiceUnit.java + * + */ +package net.openesb.component.${componentName}; + +import net.openesb.component.${componentName}.common.deployment.ServiceUnit; +import net.openesb.component.${componentName}.common.deployment.ProviderEndpoint; +import net.openesb.component.${componentName}.common.deployment.SUDescriptor.Provides; +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 + * implementation to configure the service provider endpoint on this component + * deployed in the service unit. It also processes the deployment artifacts that + * are specific to the service provided by the component. + * + * @author chikkala + */ +public class ProviderSEServiceUnit extends ServiceUnit { + + private XSLTFileLocator mXsltFileLocator; + + /** + * Creates a new instance of ProviderSEServiceUnit + */ + public ProviderSEServiceUnit(String suName, String suRootPath) { + super(suName, suRootPath); + } + + protected XSLTFileLocator getXsltFileLocator() { + return this.mXsltFileLocator; + } + + @Override + protected ProviderEndpoint createProviderEndpoint(Provides provides, Definition wsdlDef) { + return new ProviderSEEndpoint(provides, wsdlDef, this); + } + + /** + * load and validates the component specific deployment artifacts. It loads + * the xsltmap properties into XSLTFileLocator which will be used to find + * the xslt file corresponding to a service operation. + */ + @Override + protected void loadOtherArtifacts() throws DeploymentException { + super.loadOtherArtifacts(); + // load any component specific service unit artifacts + if (this.mXsltFileLocator == null) { + try { + this.mXsltFileLocator = + new XSLTFileLocator(this.getSURootPath(), "xsltmap.properties"); + } catch (Exception ex) { + throw new DeploymentException(ex); + } + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTFileLocator.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTFileLocator.java new file mode 100644 index 000000000..3349d0027 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTFileLocator.java @@ -0,0 +1,210 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * XSLTFileLocator.java + */ +package net.openesb.component.${componentName}; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; +import javax.xml.namespace.QName; + +/** + * This class represents the component specific deployment artifact which reads + * the deployed "xsltmap.properties" file in the service unit and processes it + * to find the xslt file to be used for a particular operation on a service + * provided by the deployment. + *
    + * The "xsltmap.properties" file should contain two types of properties
    + * 1.for namespace prefix to namespaceURI map that starts with "xmlns." prefix like
    + *   "xmlns.tns-prefix=http://www.sun.com/jbi/examples/sample-service/echo"
    + * 2. a service description to xslt file properties with syntax like
    + *   "{tns-prefix}service-name=xslt_file_name"  and
    + *   "{tns-prefix}service-name.{tns-prefix}operation-name=xslt_file_name" and
    + *   "{tns-prefix}service-name.{tns-prefix}interface-name.operation-name=xslt_file_name" .
    + * the service description property is a "." delimited tokens that represents a serive
    + * or interface qname and a operation name. To locate xslt file either with service qname
    + * or service qname and operaton or serivice qname and interface qname and operation,
    + * all the three properties specified above should be there for each xslt file. for example,
    + *  xmlns.echo1=http://www.sun.com/jbi/examples/sample-service/echo
    + *  xmlns.echo2=http://www.sun.com/jbi/examples/sample-service/echo
    + *  {echo2}echoService=echo.xsl
    + *  {echo2}echoService.{echo1}echo=echo.xsl
    + *  {echo2}echoService.{echo1}echo.echo=echo.xsl
    + * 
    + * + * @author chikkala + */ +public class XSLTFileLocator { + + private Map mXsltFileMap; + + /** + * Creates a new instance of XsltLocator + */ + public XSLTFileLocator(String rootPath, String mapFile) throws Exception { + this.mXsltFileMap = new HashMap(); + initXsltLocator(rootPath, mapFile); + } + + private void initXsltLocator(String rootPath, String mapFilePath) throws Exception { + @SuppressWarnings("unchecked") + Map mapProps = loadMappingProperties(rootPath, mapFilePath); + + Map nsMap = new HashMap(); + Map xsltMap = new HashMap(); + + for (String name : mapProps.keySet()) { + String value = mapProps.get(name); + if (name.startsWith("{")) { + xsltMap.put(name, value); + } else if (name.startsWith("xmlns.")) { + String xmlns = name.substring(6); + nsMap.put(xmlns, value); + } + } + + for (String name : xsltMap.keySet()) { + String value = xsltMap.get(name); + String[] tokens = name.split("${symbol_escape}${symbol_escape}."); + String svcName = null; + String intrName = null; + String opName = null; + + if (tokens.length == 1) { + svcName = expandQName(tokens[0], nsMap); + } else if (tokens.length == 2) { + svcName = expandQName(tokens[0], nsMap); + opName = expandQName(tokens[1], nsMap); + } else if (tokens.length == 3) { + svcName = expandQName(tokens[0], nsMap); + intrName = expandQName(tokens[1], nsMap); + opName = tokens[2]; + } else { + System.out.println("invalid property name in xslt map property" + name); + } + + StringBuffer buff = new StringBuffer(); + buff.append(svcName); + if (intrName != null) { + buff.append("."); + buff.append(intrName); + } + if (opName != null) { + buff.append("."); + buff.append(opName); + } + File file = new File(rootPath, value); + String xsltFile = file.getAbsolutePath(); + this.mXsltFileMap.put(buff.toString(), xsltFile); + } + } + + private String expandQName(String qname, Map xmlnsMap) { + + // qname passed is "{prefix}localname" + QName temp = QName.valueOf(qname); + String prefix = temp.getNamespaceURI(); + String nsURI = xmlnsMap.get(prefix); + if (nsURI == null) { + nsURI = prefix; // just use the prefix as it is. + } + QName realQName = new QName(nsURI, temp.getLocalPart()); + return realQName.toString(); + } + + private Map loadMappingProperties(String rootPath, String mapFilePath) throws Exception { + File mapFile = new File(rootPath, mapFilePath); + Properties mapProps = new Properties(); + if (!mapFile.exists()) { + throw new Exception("Mapping file not found " + mapFilePath); + } + FileInputStream inStream = null; + try { + inStream = new FileInputStream(mapFile); + mapProps.load(inStream); + } catch (FileNotFoundException ex) { + ex.printStackTrace(); + } catch (IOException ex) { + ex.printStackTrace(); + } finally { + if (inStream != null) { + try { + inStream.close(); + } catch (IOException ex) { + ex.printStackTrace(); + } + } + } + return mapProps; + } + + /** + * return the xslt file mapped to either service name or service qname + + * operation qname + * + * @param serviceQName must be non null qname + * @param opQName can be null the xslt file can be located at service level. + */ + public String findXsltFile(QName serviceQName, QName opQName) { + StringBuffer buff = new StringBuffer(); + buff.append(serviceQName.toString()); + if (opQName != null) { + buff.append("."); + // workaround for the http soap bc bug which does not set the namespace + // uri on the op name. for time being use the serviceQName's namespace + String namespaceURI = opQName.getNamespaceURI(); + if (namespaceURI == null || namespaceURI.length() == 0) { + QName tempOp = + new QName(serviceQName.getNamespaceURI(), opQName.getLocalPart()); + buff.append(tempOp.toString()); + } else { + buff.append(opQName.toString()); + } + } + String xsltFile = this.mXsltFileMap.get(buff.toString()); + return xsltFile; + } + + /** + * return the xslt file mapped to either service name or service qname + + * interface qname + operation + * + * @param serviceQName must be non null service qname + * @param intrQName interface qname + * @param opName operation name ( not a qname) + */ + public String findXsltFile(QName serviceQName, QName intrQName, String opName) { + StringBuffer buff = new StringBuffer(); + buff.append(serviceQName.toString()); + if (intrQName != null) { + buff.append("."); + buff.append(intrQName.toString()); + } + if (opName != null) { + buff.append("."); + buff.append(opName); + } + String xsltFile = this.mXsltFileMap.get(buff.toString()); + return xsltFile; + } + + public String printMap() { + StringWriter buff = new StringWriter(); + PrintWriter out = new PrintWriter(buff); + for (String key : this.mXsltFileMap.keySet()) { + out.println("Key= " + key); + out.println("XsltFile= " + this.mXsltFileMap.get(key)); + } + out.close(); + return buff.getBuffer().toString(); + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTService.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTService.java new file mode 100644 index 000000000..cdc803ce6 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/XSLTService.java @@ -0,0 +1,108 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +/* + * XSLTService.java + */ +package net.openesb.component.${componentName}; + +import net.openesb.component.${componentName}.common.RuntimeHelper; +import java.io.File; +import java.io.StringReader; +import java.io.StringWriter; +import java.util.Properties; +import java.util.logging.Logger; +import javax.xml.transform.Source; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.stream.StreamSource; +import org.w3c.dom.Document; + +/** + * This is a sample service implementation that takes the input as xml document + * and the xslt file to apply the xslt transformation on the input xml and + * return the transformed output xml. This implementation of the service is + * invoked when a InOut message exchange is processed to invoke a service + * provided by the engine. + * + * @author chikkala + */ +public interface XSLTService { + + /** + * this operation takes the input xml document and constructs the output xml + * document by applying the xslt in the file specified in xsltPath + * + * @param inputDoc input xml document + * @param xsltPath absolute file path of xslt file. + * @return transformed output xml document + */ + Source transform(Source inputDoc, String xsltPath) throws Exception; + + /** + * This class implements the echo service operations which the service + * engine will invoke when a InOut message exchange is processed to invoke a + * service provided by the engine. + */ + public static class XSLTServiceImpl implements XSLTService { + + private XSLTServiceImpl() { + } + + /** + * accessor to create/locate the service implementation + * + * @return echo service implementation + */ + public static XSLTService getInstance() { + return new XSLTServiceImpl(); + } + + protected Logger getLogger() { + return RuntimeHelper.getLogger(); + } + + /** + * this operation takes the input xml document and constructs the output + * xml document with the same data to implement the echo. + * + * @param inputDoc input document + * @return output document + */ + public Source transform(Source inputDoc, String xsltPath) throws Exception { + Document outDoc = null; + StringBuffer inBuff = RuntimeHelper.readFromSource(inputDoc); + + getLogger().fine("${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound} TRANSFORMER INPUT MESSAGE BEGIN ${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}"); + getLogger().fine(inBuff.toString()); + getLogger().fine("${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound} TRANSFORMER INPUT MESSAGE END ${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}"); + + TransformerFactory tf = null; + tf = TransformerFactory.newInstance(); + StreamSource xsltSource = new StreamSource(new File(xsltPath)); + Transformer xformer = tf.newTransformer(xsltSource); + + Properties params = new Properties(); //TODO get the pramas from the user file + for (Object name : params.keySet()) { + xformer.setParameter((String) name, params.get(name)); + } + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + + DOMSource xmlSource = new DOMSource(RuntimeHelper.buildDOMDocument(new StringReader(inBuff.toString()))); + + xformer.transform(xmlSource, result); + + getLogger().fine("${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound} TRANSFORMER OUTPUT MESSAGE BEGIN ${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}"); + getLogger().fine(writer.getBuffer().toString()); + getLogger().fine("${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound} TRANSFORMER OUTPUT MESSAGE END ${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}${symbol_pound}"); + + outDoc = RuntimeHelper.buildDOMDocument(new StringReader(writer.getBuffer().toString())); + DOMSource outSource = new DOMSource(outDoc); + + return outSource; + } + } +} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/AbstractMessageExchangeHandler.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/BasicComponentLifeCycle.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentInstaller.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/ComponentRuntime.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/DefaultMessageExchangeReceiver.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeHandler.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeListener.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeReceiver.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/MessageExchangeSupport.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeContext.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/RuntimeHelper.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/AbstractServiceUnitManager.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ConsumerEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/Endpoint.java new file mode 100644 index 000000000..63e0f1790 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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 isForBindingComponent() { + boolean isForBindingComponent = false; + if ( this.mSU != null ) { + try { + isForBindingComponent = this.mSU.getSUDescriptor().isForBindingComponent(); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + return isForBindingComponent; + } + + 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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ProviderEndpoint.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/SUDescriptor.java new file mode 100644 index 000000000..c74d639fa --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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 isForBindingComponent(); + + /** + * 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 mIsForBindingComponent; + + protected SUDescriptorImpl(boolean isForBindingComponent) { + this.mIsForBindingComponent = isForBindingComponent; + 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 isForBindingComponent() { + return this.mIsForBindingComponent; + } + + 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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/deployment/ServiceUnit.java new file mode 100644 index 000000000..eca695ea0 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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().isForBindingComponent(); + 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.create${componentName}Binding(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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensibilityElement.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionRegistry.java new file mode 100644 index 000000000..6bc7a60ef --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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 ${componentName} 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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractExtensionSerializer.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/AbstractNormalizer.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/SEBindingExt.java new file mode 100644 index 000000000..fa18158a7 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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}create${componentName}Binding + * @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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDL11JBIWrapper.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-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-service-engine-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 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 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-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/jbiadapter/src/net/openesb/component/__componentName__/common/wsdl/WSDLProcessor.java new file mode 100644 index 000000000..9eb0ca32c --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-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 create${componentName}Binding(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 create${componentName}Binding(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 = create${componentName}Binding(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-service-engine-v2/src/main/resources/archetype-resources/nbactions.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/nbactions.xml new file mode 100644 index 000000000..a326f04f7 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/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-service-engine-v2/src/main/resources/archetype-resources/packaging/nbactions.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/nbactions.xml new file mode 100644 index 000000000..45118cf65 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/nbactions.xml @@ -0,0 +1,51 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + + + + clean + + clean + + + + build + + install + + + + test + + package + + + + rebuild + + clean + install + + + + CUSTOM-testreport + testreport + + surefire-report:report-only + + + true + + + + CUSTOM-allreports + allreports + + site + + + true + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/pom.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/pom.xml new file mode 100644 index 000000000..7337970c7 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/pom.xml @@ -0,0 +1,185 @@ + + + + package-common + open-jbi-components + 1.1 + ../../build-common/package-common + + 4.0.0 + ${groupId} + ${componentName}-installer + sun-${componentName}-engine + ${version} + ${componentName} packaging description + + + + META-INF + src + true + + *.xml + + + + + + maven-antrun-plugin + + + ${project.artifactId}-generate-i18n-descriptors + process-resources + + run + + + + + + + + + + + + + + + + + + ${project.artifactId}-rename-jars + process-classes + + run + + + + + + + maven-dependency-plugin + + + ${project.artifactId}-fetch-deps + generate-sources + + copy-dependencies + + + ${project.build.outputDirectory}/lib + true + true + + + + + + maven-surefire-plugin + + true + + + + maven-jar-plugin + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + + + + org.apache.felix + maven-bundle-plugin + + + bundle-manifest + process-classes + + manifest + + + + + + sun-${componentName}-engine + ${componentName} Component + ${componentName} Engine + ${OSGI_VERSION} + <_removeheaders>${OSGI_MANIFEST_REMOVE_HEADERS}, Export-Package + *;-noimport:=true + lib/${componentName}-jbiadapter.jar, + lib/common-util.jar, + lib/resolver.jar, + lib/componentsl.jar + * + * + + + + + + + + open-jbi-components + ${componentName}-jbiadapter + ${version} + true + + + open-jbi-components + common-util + true + + + + open-jbi-components + resolver + true + + + + + open-jbi-components + componentsl + true + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml new file mode 100644 index 000000000..9ed1d7a62 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/jbi.xml @@ -0,0 +1,45 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) + + + + + + + ${componentName} + Description of service engine : ${componentName} + + + net.openesb.component.${componentName}.ProviderSERuntime + + + lib/${componentName}-jbiadapter.jar + + lib/wsdl4j-1.6.2.jar + + + net.openesb.component.${componentName}.ProviderSEInstaller + + + lib/${componentName}-jbiadapter.jar + + lib/wsdl4j-1.6.2.jar + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/newse-config.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/newse-config.properties new file mode 100644 index 000000000..eac2a48bf --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/packaging/src/newse-config.properties @@ -0,0 +1,6 @@ +#set( $symbol_pound = '#' ) +#set( $symbol_dollar = '$' ) +#set( $symbol_escape = '\' ) +${symbol_pound}Default I18n properties bundle +${symbol_pound}Thu Aug 01 18:36:50 IST 2013 +/jbi${symbol_escape}:jbi/jbi${symbol_escape}:component/jbi${symbol_escape}:identification/jbi${symbol_escape}:description=Description of service engine ${symbol_escape}: newse diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/pom.xml b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/pom.xml new file mode 100644 index 000000000..8faee15e1 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/pom.xml @@ -0,0 +1,59 @@ + + + + ojc-common + open-jbi-components + 1.1 + ../build-common/ojc-common + + 4.0.0 + ${groupId} + ${artifactId} + pom + ${artifactId}-top + ${version} + Top-level Build for ${artifactId}-top + + install + + + + + + + runSystemTests + + + + jbiadapter + packaging + + + + + diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/smvn.bat b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/smvn.bat new file mode 100644 index 000000000..054886d8e --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/main/resources/archetype-resources/smvn.bat @@ -0,0 +1,6 @@ +@echo off +set JAVA_HOME=C:\Program Files (x86)\Java\jdk1.6.0_38 +set path=%path%;C:\Program Files (x86)\Java\jdk1.6.0_38\bin +set JV_SRCROOT=D:\codes\logicoyOpenESB\openesb-components +set JV_GFBASE=D:\softwares\openesb_logicoy_last_working57\glassfish +mvn -Dmaven.test.skip=true -Dmaven.repo.local=C:\Users\logicoyparam\m2\repository %* \ No newline at end of file diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/archetype.properties b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/archetype.properties new file mode 100644 index 000000000..f930aa149 --- /dev/null +++ b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/archetype.properties @@ -0,0 +1,6 @@ +#Fri Aug 02 18:50:56 IST 2013 +package=it.pkg +version=0.1-SNAPSHOT +groupId=archetype.it +artifactId=serviceEngineArchtype +componentName=${artifactId} diff --git a/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/goal.txt b/maven-ojc-archeType-v2/maven-archetype-service-engine-v2/src/test/resources/projects/basic/goal.txt new file mode 100644 index 000000000..e69de29bb