Compare commits

...

79 Commits

Author SHA1 Message Date
Jenkins Continuous Build server
e5963a3910 Set version to 7.2.1 M2 2019-01-29 16:18:29 +01:00
Roman
c2f52f2acc feat(TDI-41387): Migration task for tCreateTable parameter and Oracle codegen fix (#3191)
* feat(TDI-41387): UseExistConnection problem in Oracle

* feat(TDI-41387): migration task for reset additional params field

* feat(TDI-41387): migration task to reset properties
2019-01-29 10:24:51 +02:00
jiezhang-tlnd
654e035974 fix(TUP-21505)be able to save jdbc connection even test fail (#3176)
* fix(TUP-21505)be able to save jdbc connection even test fail

* fix(TUP-21505)popup the main error for user is convienent

* fix(TUP-21505) popup the main error for user is convienent

* fix(TUP-21505) popup the main error for user is convienent
2019-01-29 11:48:31 +08:00
hwang-talend
37adcec242 bugfix(TUP-18054):Deployment Version:array icon should be moved for job (#3194)
bugfix(TUP-18054):Deployment Version:array icon should be moved for job with testcase.
2019-01-29 11:20:09 +08:00
chmyga
b6323e92b5 fix(TDI-41647): Replace com.sun.org.apache.xerces.internal.dom.Elemen… (#3179)
* fix(TDI-41647): Replace com.sun.org.apache.xerces.internal.dom.ElementNSImpl

* Move talend-ws library to tdi-studio-se

* Move talend-ws library to mvn

* Update dependencies to same versions as in tWebService component

* fix visitMethodInsn() method calls in JAXBUtils

* fix(TDI-41647): Replace com.sun.org.apache.xerces.internal.dom.ElementNSImpl

* Replace com.sun.org.apache.xerces.internal.dom.ElementNSImpl with org.w3c.dom.Element
2019-01-28 14:50:34 +02:00
sponomarova
e973624d17 fix(TBD-8260): fix for tBigQueryOutput which always treats Integer schema as Nullable (#3200) 2019-01-28 13:29:52 +01:00
Dmytro Sylaiev
732f041e0e fix(TDI-41678): Upgrade custom lib version to avoid compile error (#3202)
* fix(TDI-41678): Upgrade custom lib version to avoid compile error

* fix(TDI-41678): Make timestamp-version
2019-01-28 14:12:34 +02:00
Tao Tao
d2b24287ef Ttao/work item/tup 21143 generate random value for null password hiding code (#3203)
workItem(TUP-21143):Generate random value for null password hiding code

https://jira.talendforge.org/browse/TUP-21143
2019-01-28 18:56:41 +08:00
jiezhang-tlnd
67b1f5f63e fix(TUP-21836)Display of SFTP Metadata (#3201)
* fix(TUP-21836)Display of SFTP Metadata

* fix(TUP-21836)Display of SFTP Metadata
2019-01-28 18:42:25 +08:00
slushatel
2ed16b7e8e feat(TDI-41405): add transaction management (#3177). Revert (#3199) 2019-01-25 17:49:51 +02:00
Tao Tao
b499d3432b workItem(TUP-21143):Generate random value for null password hiding code (#3197)
https://jira.talendforge.org/browse/TUP-21143
2019-01-25 22:21:54 +08:00
Tao Tao
bc66eff728 fix(TUP-2382):The Connection Window should NOT show the exact number of (#3196)
characters for the password

https://jira.talendforge.org/browse/TUP-2382
2019-01-25 18:10:35 +08:00
hcyi
3539b4ce03 fix(TUP-21648):tJDBCSCDELT table list cannot be retrieved. (#3186) 2019-01-25 14:20:23 +08:00
sponomarova
47082201e6 fix(TBD-8242): Compilation error for tFileInputDelimited/tFixedFlowInput with int type not nullable (#3193) 2019-01-24 16:42:13 +02:00
Tao Tao
8632fd8cb3 workItem(TUP-21232):Secure SAXParserFactory configuration (#3172)
https://jira.talendforge.org/browse/TUP-21232
2019-01-24 14:24:57 +08:00
SunChaoqun
a576d88ecd TESB-24596:Docker Support for Microservice - Publish to Docker Registry (#3188) 2019-01-24 11:39:19 +08:00
slushatel
a4c9e0b7ee feat(TDI-41405): add transaction management (#3177) 2019-01-22 16:36:30 +02:00
hwang-talend
84e6601675 bugfix(TUP-20768):Test Case's build failed (user defined routine (#3164)
bugfix(TUP-20768):Test Case's build failed (user defined routine dependencies are not generated)
2019-01-22 15:32:31 +08:00
Zhiwei Xue
3282e07d77 fix(TUP-21532):re-fix child assembly problem. (#3181) 2019-01-21 19:08:52 +08:00
Tao Tao
673ed49d61 Revert "workItem(TUP-21251):Replace com.sun.org.apache.xerces.internal.jaxp (#3157)" (#3182)
This reverts commit b5121333e4.
2019-01-21 15:55:28 +08:00
Tao Tao
b5121333e4 workItem(TUP-21251):Replace com.sun.org.apache.xerces.internal.jaxp (#3157)
https://jira.talendforge.org/browse/TUP-21251
2019-01-21 14:44:45 +08:00
Roman
6d73503d7d feat(TDI-41387): add additional parameters field (#2973)
* feat(TDI-41387): add property to tFireBirdConnection

* feat(TDI-41387): add property to Greenplum, Ingres

* feat(TDI-41387): add property to Interbase

* feat(TDI-41387): add property to JavaDB

* feat(TDI-41387): add property to MaxDB

* feat(TDI-41387): add property to ParAccel

* feat(TDI-41387): add property to Postgre family

* feat(TDI-41387): add property to VectorWise

* feat(TDI-41387): add property to tCreateTable

* feat(TDI-41387): change property in tCreateTable

* feat(TDI-41387): restore en translation from origin

* feat(TDI-41387): remove separator when it default

* feat(TDI-41387): change url separator for Redshift

* feat(TDI-41387): remove getSeparator method

* feat(TDI-41387): add default param to AS400 and MSSQL

* feat(TDI-41387): replace two params with same name by one

* feat(TDI-41387): hide property when useExistCon=true

* feat(TDI-41387): place properties field to advanced settings

* feat(TDI-41387): change default if logic for MSSQL and AS400

* feat(TDI-41387): change default separator for Sybase db

* feat(TDI-41387): reduce code for firebird

* feat(TDI-41387): reduce code for firebird and greenplum

* feat(TDI-41387): reduce code for Ingres, Interbase, JavaDB

* feat(TDI-41387): reduce code for MaxDB, ParAccel, PostgreSQL, PostgresPlus, tVectorWise

* feat(TDI-41387): change separator for Snowflake

* feat(TDI-41387): move additional params field from basic to advanced
2019-01-18 12:25:17 +02:00
hcyi
a7f05381d1 Hcyi/tup 21433 studio autologin not work (#3171)
* fix(TUP-21433):Studio autologin not work.

* fix(TUP-21433):Studio autologin not work.

* fix(TUP-21433):improve for Studio autologin not work.

* fix(TUP-21433):improve for Studio autologin not work.
2019-01-18 16:24:36 +08:00
hwang-talend
2c523cf75f bugfix(TUP-17933):Errors when select testcase in project (#3118)
bugfix(TUP-17933):Errors when select testcase in project settings-version management/status management.
2019-01-18 14:38:35 +08:00
Zhiwei Xue
41dfae7065 fix(TUP-21532):fix StandardJobStandaloneBuildProviderTest (#3174) 2019-01-17 16:51:32 +08:00
Tao Tao
0d3439647a Revert "workItem(TUP-21232):Secure SAXParserFactory configuration (#3159)" (#3170)
This reverts commit dec408bd00.
2019-01-17 11:24:52 +08:00
Dmytro Sylaiev
19a7dc5c6f feat(TDI-40990): Add http proxy support for ftps (#3080)
* feat(TDI-40990): Add http proxy support for ftps

* Avoid set PROT and PBSZ commands

* feat(TDI-40990): Allign using proxy marker

* feat(TDI-40990): Remove SSLReuse class from template

* feat(TDI-40990): Use correct constructor

* feat(TDI-40990): Bound FTP components to proxy-support ftps library

* feat(TDI-40990): Make talend-commons-net library included to studio

* Bound all ftp components except tFTPConnection to UrlPath

* feat(TDI-40990): Use HTTP proxy when it's set for FTPS

* chore(TDI-40990): Change package name for custom clients
2019-01-16 10:26:36 +02:00
Dmytro Sylaiev
5ba502c85d Dsylaiev/tdi 40990 support ftps http proxy commons net prot p (#3146)
* feat(TDI-40990): Add talend-commons-net library

* feat(TDI-40990): Add distribution section to deploy lib in nexus

* chore(TDI-40990): Use talend formatter

* feat(TDI-40990): Extract SSLSessionReuseFTPSClient behavior

* feat(TDI-40990): Rename ProxyClient

* chore(TDI-40990): Minor refactoring

* Use while instead of for

* chore(TDI-40990): Remove eclipse service files

* chore(TDI-40990): Change package name

* feat(TDI-40990): Extends talend-commons-net library to support PROT C

* Major refactoring

* chore(TDI-40990): Make methods order more reasonable

* chore(TDI-40990): Add comments

* Fix using default PROT level
2019-01-16 10:26:18 +02:00
Tao Tao
28f3145a94 Revert "fix(TUP-21205):Remove CryptoHelper from tcommon-studio-se + (#3162)" (#3169)
This reverts commit 23631b71ab.
2019-01-16 15:50:16 +08:00
Tao Tao
23631b71ab fix(TUP-21205):Remove CryptoHelper from tcommon-studio-se + (#3162)
tcommon-studio-ee

https://jira.talendforge.org/browse/TUP-21205
2019-01-16 13:24:06 +08:00
Zhiwei Xue
323bd8c2d7 fix(TUP-21532): fix run job and assembly problem. (#3165) 2019-01-16 10:34:58 +08:00
Tao Tao
dec408bd00 workItem(TUP-21232):Secure SAXParserFactory configuration (#3159)
* workItem(TUP-21232):Secure SAXParserFactory configuration

https://jira.talendforge.org/browse/TUP-21232

* workItem(TUP-21232):Secure SAXParserFactory configuration

https://jira.talendforge.org/browse/TUP-21232

* workItem(TUP-21232):Secure SAXParserFactory configuration

https://jira.talendforge.org/browse/TUP-21232
2019-01-15 11:30:05 +08:00
Ivan Gonchar
66f40e1d02 Igonchar/tup 21467 (#3166)
* feat(TUP-21467): add copy of TableController

* feat(TUP-21467): add copy of TableGenerator

* feat(TUP-21467): implement mapping for Suggestable Table widget

* feat(TUP-21467): refactor to make SuggestableTableController code clearer

* feat(TUP-21467): add selection dialog button stub

* feat(TUP-21467): implement SuggestableTableParameter

* feat(TUP-21467): implement suggestions retrieval for Suggestable Table widget

* fix(TUP-21467): move common table setup to TableElementParameter constructor

* feat(TUP-21467): implement TableValueSelectionDialog

* fix(TUP-21467): fix TableElementParameter.updateValueOnly() method

* fix(TUP-21467): implement persistance for TACOKIT_SUGGESTABLE_TABLE

* feat(TUP-21467): hide Table toolbar

* fix(TUP-21467): clean SuggestableTableParameter

* fix(TUP-21467): clean code in TableElementParameter

* fix(TUP-21467): remove dead code in WidgetTypeMapper

* fix(TUP-21467): clean code in TableValueSelectionDialog

* fix(TUP-21467): clean code

* fix(TUP-21467): remove unused static methods from SuggestableTableController

* fix(TUP-21467): remove duplicated in parent methods from SuggestableTableController

* fix(TUP-21467): extend method visibility in TableController

* fix(TUP-21467): remove duplicated code and clean code

* fix(TUP-21467): format SuggestableTableController
2019-01-15 11:29:18 +08:00
hcyi
5b5c190f6e fix(TUP-20508):Audit: Generating cannot be finished and canceled after (#2957)
30 mins.
2019-01-14 09:58:04 +08:00
pyzhou
3f830d830a fix(TDI-41596):reading same column twice from resultset (#3129)
* fix(TDI-41596):reading same column twice from resultset

*  add Philip Hoflack to the contributors list

* change EOL to Linux style
2019-01-11 10:29:00 +08:00
pyzhou
fc678c7832 fix(TDI-31569):keep the old behavior of tMssqloutput (#3145)
* fix(TDI-31569):keep the old behavior of tMssqloutput

* fix(TDI-31569):change the logic.
2019-01-11 10:03:00 +08:00
Jane Ding
f396775201 fix(TUP-19463)extend display of groupId in job > deployment sub-tab (#3153)
https://jira.talendforge.org/browse/TUP-19463
2019-01-10 11:43:56 +08:00
Tao Tao
1687d192ee bugfix(TUP-21562):escape character didn't get properly converted from SQL Builder to Query field (#3154)
https://jira.talendforge.org/browse/TUP-21562
2019-01-10 11:00:33 +08:00
hwang-talend
29c562ae21 bugfix(TUP-21331):Change between repository schemas for tMap output not (#3151)
bugfix(TUP-21331):Change between repository schemas for tMap output not propagated
2019-01-10 10:39:16 +08:00
hcyi
d782ae46fd fix(TUP-21648):tJDBCSCDELT table list cannot be retrieved. (#3150) 2019-01-10 10:26:03 +08:00
Ivan Gonchar
3f6dad3d68 Igonchar/tup 21467 string completion (#3155)
* feat(TUP-21467): add mapping to PREV_COLUMN_LIST widget in WidgetTypeMapper

* feat(TUP-21467): use TEXT widget instead of PREV_COLUMN_LIST in wizard dialog
2019-01-10 10:18:21 +08:00
jzhao
5f1bd9f2fc fix(TDI-41506):High CVE Vulnerability found in Talend Components (#3119)
* upgrade commons-fileupload from 1.0 to 1.3.1
* upgrade xalan/serializer from 2.7.1 to 2.7.2
* remove serializer-2.7.1
2019-01-09 14:24:52 +08:00
hwang-talend
0f52288bd5 bugfix(TUP-21330):Change to repository schema used in tMap propagated (#3116)
bugfix(TUP-21330):Change to repository schema used in tMap propagated  incorrectly to any following component
2019-01-09 11:21:36 +08:00
Jane Ding
b01d49b3e7 fix(TUP-19978)It is very slow to delete many items at the same time on (#3128)
GIT mode
https://jira.talendforge.org/browse/TUP-19978
2019-01-09 10:59:18 +08:00
Zhiwei Xue
0bed1c0407 fix(TUP-21596):exclude tLibraryLoad jars for independent subjob. (#3143)
* fix(TUP-21596):exclude tLibraryLoad jars for independent subjob.

* fix(TUP-21596): Update JavaProcessorUtilitiesTest.
2019-01-09 10:25:14 +08:00
Ivan Gonchar
8b3e95d6e1 feat: upgrade Tacokit version to 1.1.4 (#3152) 2019-01-08 13:54:20 +02:00
Roman
5efb343458 fix(TDI-41581): change MySQL db name recognition (#3137) 2019-01-03 17:09:57 +02:00
Mike Yan
2ab9f54921 fix(TESB-24336): Add route and service type for local runtime mode (#3142) 2019-01-03 16:19:39 +08:00
Tao Tao
1938554f29 bugfix(TUP-21564):tMap settings - the "Options" window pop-up not (#3136)
showing complete view

https://jira.talendforge.org/browse/TUP-21564
2019-01-02 17:33:33 +08:00
SunChaoqun
047d082732 TESB-24354:SFTP proxy bean not recognized in runtime only (#3131) 2019-01-02 14:27:51 +08:00
zwxue
eb210a4c93 fix(TUP-21532):Standard DI job which refers to big data batch job having (#3120)
* fix(TUP-21532):Standard DI job which refers to big data batch job having
S3 component and standard DI job having S3 connection component fails
with an error.

* fix(TUP-21532):add JUnit
2018-12-29 18:20:35 +08:00
pyzhou
40689d795e fix(TDI-31569):specify identity column don't work for dynamic (#3121)
* fix(TDI-31569):specify identity column don't work for dynamic

* eliminate debug code
2018-12-29 17:01:52 +08:00
hcyi
cad81587f8 fix(TUP-21419):When generating HTML by right-clicking a job in the studio, some of the JAPANESE parameters showed as "!!!TEMP_DIR.NAME!!!" or "!!!DESTINATION.NAME!!!" or any others. (#3083)
* fix(TUP-21419):When generating HTML by right-clicking a job in the
studio, some of the JAPANESE parameters showed as "!!!TEMP_DIR.NAME!!!"
or "!!!DESTINATION.NAME!!!" or any others.

* fix(TUP-21419):When generating HTML by right-clicking a job in the
studio, some of the JAPANESE parameters showed as "!!!TEMP_DIR.NAME!!!"
or "!!!DESTINATION.NAME!!!" or any others.
2018-12-29 10:08:34 +08:00
kjwang-talend
8eb4634665 Kjwang/fix tup 21305 set the secure processing feature on transformer factory instances (#3117)
* Fix TUP-21305 Set the secure processing feature on TransformerFactory
instances
https://jira.talendforge.org/browse/TUP-21305

* Fix TUP-21305 Set the secure processing feature on TransformerFactory
instances
https://jira.talendforge.org/browse/TUP-21305
2018-12-28 19:06:36 +08:00
kjwang-talend
e59ef61c8b TUP-21263 Consider setting the secure processing feature on XPathFactory (#3114)
instances
https://jira.talendforge.org/browse/TUP-21263
2018-12-28 16:37:44 +08:00
Roman
bd1b2a8f02 fix(TDI-41556): Redshift driver name was changed (#3096)
* fix(TDI-41556): Redshift driver name was changed

* fix(TDI-41556): moved the creation of array outside loop
2018-12-28 08:30:15 +02:00
nrousseau
b9ef91fac4 feat(TUP-21119) fix version of commons.logging 2018-12-28 11:26:45 +08:00
Dmytro Sylaiev
e82ad8e940 fix(TDI-41576): Fix property visibility tCreateTable oracle (#3107) 2018-12-26 14:55:09 +02:00
Jane Ding
d8d9c02fdb fix(TUP-21425)Job built in 7.0.1 not working in 7.1.1 (#3106)
https://jira.talendforge.org/browse/TUP-21425
2018-12-26 16:58:31 +08:00
jiezhang-tlnd
386811a6d3 fix(TUP-21439)Preview error. Some settings must be changed (#3109)
* fix(TUP-21439)Preview error. Some settings must be changed

* fix(TUP-21439)Preview error. Some settings must be changed.

* fix(TUP-21439)Preview error. Some settings must be changed

* fix(TUP-21439)Preview error. Some settings must be changed

* fix(TUP-21439)Preview error. Some settings must be changed
2018-12-26 16:14:58 +08:00
Tao Tao
b8937d6a08 bugfix(TUP-19612): Save Query: String in default pop up dialog is truncated (#3111)
https://jira.talendforge.org/browse/TUP-19612
2018-12-26 16:04:15 +08:00
nrousseau
03e376ad7c Revert "bugfix(TUP-21330):Change to repository schema used in tMap propagated" (#3113)
* Revert "fix(TUP-21395)Useless popup Window shows when updating context changes (#3068)"

This reverts commit 28a1f3ab34.

* Revert "fix(TUP-21474): Facing issue while accessing joblet present on job in (#3105)"

This reverts commit 32d96b1acc.

* Revert "bugfix(TUP-20663):tAccessOutputBulkExec/tAccessBulkExec are visible at (#3052)"

This reverts commit 1c31954b3b.

* Revert "bugfix(TUP-21330):Change to repository schema used in tMap propagated (#3094)"

This reverts commit 80f556e553.
2018-12-26 14:33:12 +08:00
jiezhang-tlnd
28a1f3ab34 fix(TUP-21395)Useless popup Window shows when updating context changes (#3068)
* fix(TUP-21395)Useless popup Window shows when updating context changes
of Adding Context Group"

* fix(TUP-21395)Useless popup Window shows when updating context changes

* junit(TUP-21395)
2018-12-25 17:16:49 +08:00
Chao MENG
32d96b1acc fix(TUP-21474): Facing issue while accessing joblet present on job in (#3105)
fix(TUP-21474): Facing issue while accessing joblet present on job in main project
https://jira.talendforge.org/browse/TUP-21474
2018-12-25 15:05:46 +08:00
hwang-talend
1c31954b3b bugfix(TUP-20663):tAccessOutputBulkExec/tAccessBulkExec are visible at (#3052)
bugfix(TUP-20663):tAccessOutputBulkExec/tAccessBulkExec are visible at default even without activating in the Project Setting
2018-12-25 14:52:12 +08:00
hwang-talend
80f556e553 bugfix(TUP-21330):Change to repository schema used in tMap propagated (#3094)
* bugfix(TUP-21330):Change to repository schema used in tMap propagated
incorrectly to any following component
2018-12-25 14:43:39 +08:00
SunChaoqun
656d74e935 TESB-24409:Docker Image Support for Microservice Builds for Routes and (Rest-) Data Services(#3108) 2018-12-25 14:40:00 +08:00
hcyi
13d4c5c726 fix(TUP-6655):drag and drop mysql db connection: tCreateTable component (#3099)
missing in selection list.
2018-12-25 10:26:46 +08:00
Tao Tao
76c3d773f0 bugfix(TUP-19612):Save Query: String in default pop up dialog is (#3104)
truncated

https://jira.talendforge.org/browse/TUP-19612
2018-12-25 10:23:40 +08:00
Jane Ding
7e0dc01878 fix(TUP-21333)OnSubJob Links Not Working (#3079)
https://jira.talendforge.org/browse/TUP-21333
2018-12-24 10:38:10 +08:00
nrousseau
5b3cba8fb0 feat(TUP-21119) remove bundle compilation setup 2018-12-22 22:22:58 +08:00
hcyi
6e7a5a26c8 fix(TUP-9814):SCD component add a warning message if the source key is (#3097)
empty.
2018-12-21 10:44:51 +08:00
zwxue
dc279e7a39 fix(TUP-21175):fix BuildJobHandlerTest for TDM (#3095) 2018-12-20 20:59:44 +08:00
Chao MENG
8c184342a4 feat(TUP-21119): Cleanup features, each plugin must be in one unique (#3092)
feature
https://jira.talendforge.org/browse/TUP-21119
2018-12-20 13:20:05 +08:00
Chao MENG
ff1336de43 feat(TUP-21119): Cleanup features, each plugin must be in one unique (#3091)
feature
https://jira.talendforge.org/browse/TUP-21119
2018-12-20 13:06:21 +08:00
Chao MENG
b698da7a97 Cmeng/feat/tup 21119 cleanup features (#3058)
* test update studio build

* feat(TUP-21119): Cleanup features, each plugin must be in one unique feature\ncmeng/feat/TUP-21119-Cleanup_features

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

Revert changes in case there may be license problem

* feat(TUP-21119): Cleanup features, each plugin must be in one unique
feature
https://jira.talendforge.org/browse/TUP-21119

move dependencies
2018-12-20 11:07:58 +08:00
Dmytro Sylaiev
93b7c46b94 Dsylaiev/tdi 41404 fix 64kb issue t run job context (#3087)
* fix(TDI-41404): Avoid 64kb method issue when too many context parameter exists

* fix(TDI-41404): Regain missing warnings

* fix(TDI-41404): Fix wrong context processing in footer
2018-12-19 11:33:39 +02:00
jiezhang-tlnd
923e28e96b fix(TUP-21396)keeping popup for running a job after adding a var in (#3070)
context group
2018-12-19 11:11:57 +08:00
zwxue
8e6d45197a fix(TUP-21175):fix test BuildJobHandlerTest.testBuildJobWithTDM (#3084) 2018-12-19 10:42:46 +08:00
379 changed files with 9655 additions and 3647 deletions

View File

@@ -4,4 +4,5 @@ Huge thanks to these people who contributed in making Talend product better:
- [jlolling](https://github.com/jlolling) (Jan -and Miss- Lolling)
- [kirkalicious](https://github.com/kirkalicious) (Kirk Tarou)
- [mrizzato](https://github.com/mrizzato) (Massimiliano Rizzato)
- [brazabr](https://github.com/brazabr) (Thiago Benvenuto)
- [brazabr](https://github.com/brazabr) (Thiago Benvenuto)
- [phoflack](https://jira.talendforge.org/secure/ViewProfile.jspa?name=phoflack) (Philip Hoflack)

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.abstractmap.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.alfrescooutput.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.business.diagram.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.codegen.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.components.exchange.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.core.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.dbmap.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.documentation.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.fileoutputxml.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.gefabstractmap.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.mapper.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.maven.job.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.rowgenerator.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.runprocess.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.scd.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.webservice.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.xmlmap.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.expressionbuilder.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.presentation.onboarding.resource.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.presentation.onboarding.resource.tos.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.repository.ftp.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.repository.json.nl</artifactId>

View File

@@ -3,22 +3,21 @@ output.. = class/
bin.includes = META-INF/,\
.,\
plugin_en.properties,\
plugin_zh.properties\
,plugin_ar.properties\
,plugin_zh_CN.properties\
,plugin_ru.properties\
,plugin_ro.properties\
,plugin_jp.properties\
,plugin_hr.properties\
,plugin_fr.properties\
,plugin_pt_BR.properties\
,plugin_nl.properties\
,plugin_el.properties\
,plugin_ja.properties\
,plugin_it.properties\
,plugin_kr.properties\
,plugin_es.properties\
,plugin_tr.properties\
,plugin_pl.properties\
,plugin_de.properties\
,plugin_swtbot.properties
plugin_ar.properties,\
plugin_zh_CN.properties,\
plugin_ru.properties,\
plugin_ro.properties,\
plugin_jp.properties,\
plugin_hr.properties,\
plugin_fr.properties,\
plugin_pt_BR.properties,\
plugin_nl.properties,\
plugin_el.properties,\
plugin_ja.properties,\
plugin_it.properties,\
plugin_kr.properties,\
plugin_es.properties,\
plugin_tr.properties,\
plugin_pl.properties,\
plugin_de.properties,\
plugin_swtbot.properties

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.repository.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.repository.view.di.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.sbi.engines.client.nl</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.spagic.engines.client.nl</artifactId>

View File

@@ -2,5 +2,4 @@ source.. = src/main/java/
output.. = class/
bin.includes = META-INF/,\
.,\
plugin_en.properties,\
plugin_zh.properties
plugin_en.properties

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.sqlbuilder.nl</artifactId>

View File

@@ -1,79 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.designer.business.feature"
label="Business Feature"
version="7.2.1.qualifier"
provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#business-feature">
Complete description about this feature at http://www.talend.com/online/featuresdescription.html#business-feature
</description>
<copyright url="http://www.talend.com/online/copyright.txt">
Copyright Talend 2006, 2007
</copyright>
<license>
The licence are describe in branding feature
</license>
<url>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<includes
id="org.eclipse.gmf"
version="0.0.0"/>
<includes
id="org.eclipse.emf.workspace"
version="0.0.0"/>
<includes
id="org.eclipse.emf.common"
version="0.0.0"/>
<includes
id="org.eclipse.emf.ecore"
version="0.0.0"/>
<includes
id="org.eclipse.emf.ecore.edit"
version="0.0.0"/>
<includes
id="org.eclipse.emf.transaction"
version="0.0.0"/>
<includes
id="org.eclipse.emf.validation"
version="0.0.0"/>
<includes
id="org.eclipse.emf.edit"
version="0.0.0"/>
<includes
id="org.eclipse.gef"
version="0.0.0"/>
<includes
id="org.eclipse.gmf.runtime.notation"
version="0.0.0"/>
<plugin
id="org.talend.designer.business.diagram"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.business.diagram.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<feature id="org.talend.designer.business.feature" label="Business Feature" version="7.2.1.qualifier" provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#business-feature">Complete description about this feature at http://www.talend.com/online/featuresdescription.html#business-feature</description>
<copyright url="http://www.talend.com/online/copyright.txt">Copyright Talend 2006, 2007</copyright>
<license>The licence are describe in branding feature</license>
<url>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<requires>
<import feature="org.eclipse.emf.common" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.emf.ecore" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.emf.ecore.edit" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.emf.edit" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.emf.transaction" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.emf.validation" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.emf.workspace" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.gef" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.gmf" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.eclipse.gmf.runtime.notation" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.designer.business.diagram" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.business.diagram.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.business.feature</artifactId>

View File

@@ -1,280 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.designer.feature"
label="Designer Feature"
version="7.2.1.qualifier"
provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#designer-feature">
Complete description about this feature at http://www.talend.com/online/featuresdescription.html#designer-feature
</description>
<copyright url="http://www.talend.com/online/copyright.txt">
Copyright Talend 2006, 2007
</copyright>
<license>
The licence are describe in branding feature
</license>
<url>
<update label="CORE Talend update site for milestones" url="http://talendforge.org/core/updatesite/testing/"/>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<includes
id="org.eclipse.gef"
version="0.0.0"/>
<includes
id="org.talend.m2e.feature"
version="0.0.0"/>
<includes
id="org.talend.utils.feature"
version="0.0.0"/>
<plugin
id="org.talend.designer.core"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.codegen"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.runprocess"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.sqlbuilder"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.codegen.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.core.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.runprocess.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.sqlbuilder.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.libraries.apache"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.dom4j-jaxen"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jackson"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.javacsv"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.csv"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.librariesmanager"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.librariesmanager.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.metadata.managment"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.model"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.jexcel"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.mozilla"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.datatools.xml"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.osgi.lib.loader"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.librariesmanager.ui.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.librariesmanager.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.themes.core"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="net.jeeeyul.eclipse.themes"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="net.jeeeyul.swtend"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.maven"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.runtime.visualization"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.runtime.visualization.tools"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.maven.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.maven.ui.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
<plugin
id="javax.xml.rpc"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.axis"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.sqlbuilder"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<feature id="org.talend.designer.feature" label="Designer Feature" version="7.2.1.qualifier" provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#designer-feature">Complete description about this feature at http://www.talend.com/online/featuresdescription.html#designer-feature</description>
<copyright url="http://www.talend.com/online/copyright.txt">Copyright Talend 2006, 2007</copyright>
<license>The licence are describe in branding feature</license>
<url>
<update label="CORE Talend update site for milestones" url="http://talendforge.org/core/updatesite/testing/"/>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<requires>
<import feature="org.eclipse.gef" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.m2e.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.utils.feature" version="0.0.0" match="greaterOrEqual"/>
<import plugin="javax.xml.rpc" version="0.0.0" match="greaterOrEqual"/>
<import plugin="net.jeeeyul.eclipse.themes" version="0.0.0" match="greaterOrEqual"/>
<import plugin="net.jeeeyul.swtend" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.apache.axis" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.designer.codegen" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.designer.codegen.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.core" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.core.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.designer.dbmap.nl"/>
<plugin id="org.talend.designer.maven" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.designer.maven.job"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.designer.maven.job.nl"/>
<plugin id="org.talend.designer.maven.ui" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.maven.ui.nl" download-size="0" install-size="0" version="0.0.0" fragment="true"/>
<plugin id="org.talend.designer.runprocess" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.runprocess.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.runtime.visualization" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.runtime.visualization.tools" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.libraries.mozilla" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.sqlbuilder" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.sqlbuilder" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.sqlbuilder.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.feature</artifactId>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>org.talend.fragment.jars.di.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>

View File

@@ -0,0 +1 @@
bin.includes = feature.xml

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.fragment.jars.di.feature"
label="Fragment Jars in DI"
version="7.2.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<plugin
id="org.talend.libraries.microsoft"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.oas"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.edifact"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.ftp"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.uniserv"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.sqlbuilder.jars"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
</feature>

View File

@@ -4,9 +4,9 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.libraries.bonita</artifactId>
<packaging>eclipse-plugin</packaging>
<artifactId>org.talend.fragment.jars.di.feature</artifactId>
<packaging>eclipse-feature</packaging>
</project>

View File

@@ -1,99 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.rcp.branding.tos.feature"
label="Tos branding feature"
version="7.2.1.qualifier"
provider-name=".Talend SA."
plugin="org.talend.rcp.branding.tos">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license>
[Enter License Description here.]
</license>
<url>
<update label="TOS Talend update site for milestones" url="http://talendforge.org/core/updatesite/testing/"/>
</url>
<includes
id="org.talend.tos.feature"
version="0.0.0"/>
<plugin
id="org.talend.rcp.branding.tos"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.themes.css.talend"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.presentation.onboarding"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.presentation.onboarding.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.presentation.onboarding.resource"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.presentation.onboarding.resource.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.presentation.onboarding.resource.tos"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.presentation.onboarding.resource.tos.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
<plugin
id="org.talend.designer.maven.tos"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
<plugin
id="org.talend.libraries.mdm.webservice.ce"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
<feature id="org.talend.rcp.branding.tos.feature" label="Tos branding feature" version="7.2.1.qualifier" provider-name=".Talend SA." plugin="org.talend.rcp.branding.tos">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license>[Enter License Description here.]</license>
<url>
<update label="TOS Talend update site for milestones" url="http://talendforge.org/core/updatesite/testing/"/>
</url>
<requires>
<import feature="org.talend.tos.feature" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.designer.maven.tos" download-size="0" install-size="0" version="0.0.0" fragment="true"/>
<plugin id="org.talend.libraries.mdm.webservice.ce" download-size="0" install-size="0" version="0.0.0" fragment="true"/>
<plugin id="org.talend.presentation.onboarding" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.presentation.onboarding.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.presentation.onboarding.resource" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.presentation.onboarding.resource.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.presentation.onboarding.resource.tos" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.presentation.onboarding.resource.tos.nl" download-size="0" install-size="0" version="0.0.0" fragment="true"/>
<plugin id="org.talend.rcp.branding.tos" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.themes.css.talend" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.rcp.branding.tos.feature</artifactId>

View File

@@ -1,411 +1,59 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.rcp.branding.tos.test.feature"
label="Test feature for TOS"
version="7.2.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<includes
id="org.eclipse.test"
version="0.0.0"/>
<requires>
<import plugin="org.talend.dataquality.matching" version="1.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.runprocess" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.core" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.talend.commons.ui" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.mapper" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.talend.repository" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.talend.commons.runtime" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.talend.model.migration" version="1.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.utils" version="2.1.0" match="greaterOrEqual"/>
<import plugin="org.talend.core" version="2.2.0" match="greaterOrEqual"/>
<import plugin="org.junit"/>
</requires>
<plugin
id="org.talend.designer.runprocess.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.commons.ui.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.mapper.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.model.migration.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.utils.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.core.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="test.all.test.suite"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.core.repository.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.commons.runtime.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.components.localprovider.test"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.core.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.localprovider.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.metadata.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.metadata.managment.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.core.runtime.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.librariesmanager.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.xmlmap.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.dbmap.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.rowgenerator.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.codegen.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.testutils"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.items.importexport.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.osgi.lib.loader"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.items.importexport.ui.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.maven.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.oozie.scheduler.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.dataprofiler.core.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.dataprofiler.ecos.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.dataquality.matching.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.dataquality.record.linkage.ui.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.dataquality.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.cwm.compare.test"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.cwm.management.test"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.core.ui.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"/>
<plugin
id="org.talend.librariesmanager.ui.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.generic.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.core.generic.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.view.di.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.webservice.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.updates.runtime.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.view.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.migrationTool.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.metadata.managment.ui.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.model.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.scd.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.unifiedcomponent.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.datatools.xml.test"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<feature id="org.talend.rcp.branding.tos.test.feature" label="Test feature for TOS" version="7.2.1.qualifier">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license url="http://www.example.com/license">[Enter License Description here.]</license>
<requires>
<import feature="org.eclipse.test" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.junit" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.commons.runtime" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.commons.ui" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.core" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.core" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.mapper" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.runprocess" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.model.migration" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.repository" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.utils" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.commons.runtime.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.commons.ui.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.core.repository.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.core.runtime.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.core.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.core.ui.test" download-size="0" install-size="0" version="0.0.0" fragment="true"/>
<plugin id="org.talend.datatools.xml.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.codegen.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.components.localprovider.test" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.core.generic.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.core.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.dbmap.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.mapper.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.maven.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.rowgenerator.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.runprocess.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.scd.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.unifiedcomponent.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.webservice.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.xmlmap.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.librariesmanager.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.librariesmanager.ui.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.metadata.managment.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.metadata.managment.ui.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.migrationTool.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.model.migration.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.model.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.generic.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.items.importexport.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.items.importexport.ui.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.localprovider.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.metadata.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.view.di.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.view.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.testutils" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.updates.runtime.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.utils.test" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="test.all.test.suite" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.rcp.branding.tos.test.feature</artifactId>

View File

@@ -1,261 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.repository.feature"
label="Repository Feature"
version="7.2.1.qualifier"
provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#repository-feature">
Complete description about this feature at http://www.talend.com/online/featuresdescription.html#repository-feature
</description>
<copyright url="http://www.talend.com/online/copyright.txt">
Copyright Talend 2006, 2007
</copyright>
<license>
The licence are describe in branding feature
</license>
<url>
<update label="CORE Talend update site for milestones" url="http://talendforge.org/core/updatesite/testing/"/>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<plugin
id="org.talend.repository"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.localprovider"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.localprovider.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.registration"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.core.repository"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.metadata.managment"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.core.repository.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.metadata.managment.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.registration.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.libraries.apache"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.dom4j-jaxen"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jdbc.mysql"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jexcel"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.repository.view"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.view.di"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.metadata"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.csv"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.documentation"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.datatools.xml"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.view.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.view.di.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.documentation.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.metadata.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="biz.aQute.bndlib"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.platform.logging"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.repository.items.importexport"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.items.importexport.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.osgi.lib.loader"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.libraries.mdm"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.repository.items.importexport.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.items.importexport.ui.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.eclipse.core.net"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<feature id="org.talend.repository.feature" label="Repository Feature" version="7.2.1.qualifier" provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#repository-feature">Complete description about this feature at http://www.talend.com/online/featuresdescription.html#repository-feature</description>
<copyright url="http://www.talend.com/online/copyright.txt">Copyright Talend 2006, 2007</copyright>
<license>The licence are describe in branding feature</license>
<url>
<update label="CORE Talend update site for milestones" url="http://talendforge.org/core/updatesite/testing/"/>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<requires>
<import plugin="biz.aQute.bndlib" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.net" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.designer.documentation" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.documentation.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.registration" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.registration.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.items.importexport" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.items.importexport.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.items.importexport.ui" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.items.importexport.ui.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.localprovider" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.localprovider.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.metadata" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.metadata.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.view" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.view.di" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.view.di.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.view.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.repository.feature</artifactId>

View File

@@ -1,44 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.sbi.feature"
label="SBI Feature"
version="7.2.1.qualifier"
provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#sbi-feature">
Complete description about this feature at http://www.talend.com/online/featuresdescription.html#sbi-feature
</description>
<copyright url="http://www.talend.com/online/copyright.txt">
Copyright Talend 2006, 2007
</copyright>
<license>
The licence are describe in branding feature
</license>
<url>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<plugin
id="org.talend.sbi.engines.client"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.sbi.engines.client.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.libraries.dom4j-jaxen"
download-size="0"
install-size="0"
version="0.0.0"/>
<feature id="org.talend.sbi.feature" label="SBI Feature" version="7.2.1.qualifier" provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#sbi-feature">Complete description about this feature at http://www.talend.com/online/featuresdescription.html#sbi-feature</description>
<copyright url="http://www.talend.com/online/copyright.txt">Copyright Talend 2006, 2007</copyright>
<license>The licence are describe in branding feature</license>
<url>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<plugin id="org.talend.sbi.engines.client" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.sbi.engines.client.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.sbi.feature</artifactId>

View File

@@ -1,39 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.spagic.feature"
label="SPAGIC Feature"
version="7.2.1.qualifier"
provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#spagic-feature">
Complete description about this feature at http://www.talend.com/online/featuresdescription.html#sbi-feature
</description>
<copyright url="http://www.talend.com/online/copyright.txt">
Copyright Talend 2006, 2007
</copyright>
<license>
The licence are describe in branding feature
</license>
<url>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<plugin
id="org.talend.spagic.engines.client"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.spagic.engines.client.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<feature id="org.talend.spagic.feature" label="SPAGIC Feature" version="7.2.1.qualifier" provider-name=".Talend SA.">
<description url="http://www.talend.com/online/featuresdescription.html#spagic-feature">Complete description about this feature at http://www.talend.com/online/featuresdescription.html#sbi-feature</description>
<copyright url="http://www.talend.com/online/copyright.txt">Copyright Talend 2006, 2007</copyright>
<license>The licence are describe in branding feature</license>
<url>
<discovery label="Talend web site" url="http://www.talend.com"/>
</url>
<plugin id="org.talend.spagic.engines.client" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.spagic.engines.client.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.spagic.feature</artifactId>

View File

@@ -1,446 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.tos.components.feature"
label="Components-feature"
version="7.2.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<includes
id="org.talend.esb.tooling.ws.consumer.feature"
version="0.0.0"/>
<plugin
id="org.talend.designer.components.localprovider"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.mapper"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.dbmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.abstractmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.fileoutputxml"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.scd"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.filemultischemas"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.spss"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.abstractmap.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.rowgenerator"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.alfrescooutput"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.alfrescooutput.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.dbmap.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.fileoutputxml.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.scd.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.mapper.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.rowgenerator.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.expressionbuilder"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.expressionbuilder.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.gefabstractmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.xmlmap"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="javax.wsdl"
download-size="0"
install-size="0"
version="1.6.2.v201012040545"
unpack="false"/>
<plugin
id="org.talend.designer.webservice"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.webservice.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.components.exchange"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.components.exchange.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.xmlmap.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.eclipse.help.ui"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.csv"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.designer.gefabstractmap.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="biz.aQute.bnd.annotation"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.api"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.api.service.osgi"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.common"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.common-oauth"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.generic"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.core.generic"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.salesforce.definition"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.splunk"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.jira"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.snowflake.definition"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.azurestorage"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.netsuite"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.marketo"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.googledrive"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="joda-time"
download-size="0"
install-size="0"
version="2.8.2"
unpack="false"/>
<plugin
id="org.talend.help.azurestorage"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.jira"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.marketo"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.salesforce"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.snowflake"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.splunk"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.filedelimited"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.filterrow"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.jdbc"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.help.googledrive"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.sdk.component.studio-integration"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.unifiedcomponent"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.components.jdbc.definition"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<feature id="org.talend.tos.components.feature" label="Components-feature" version="7.2.1.qualifier">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license url="http://www.example.com/license">[Enter License Description here.]</license>
<requires>
<import feature="org.talend.esb.tooling.ws.consumer.feature" version="0.0.0" match="greaterOrEqual"/>
<import plugin="biz.aQute.bnd.annotation" version="0.0.0" match="greaterOrEqual"/>
<import plugin="javax.wsdl" version="0.0.0" match="greaterOrEqual"/>
<import plugin="joda-time" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.help.ui" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.components.api" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.api.service.osgi" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.azurestorage" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.common" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.common-oauth" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.googledrive" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.jdbc.definition" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.jira" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.marketo" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.netsuite" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.salesforce.definition" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.snowflake.definition" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.components.splunk" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.abstractmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.abstractmap.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.alfrescooutput" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.alfrescooutput.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.components.exchange" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.designer.components.exchange.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.components.localprovider" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.designer.core.generic" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.dbmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.filemultischemas" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.fileoutputxml" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.fileoutputxml.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.gefabstractmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.gefabstractmap.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.mapper" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.mapper.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.rowgenerator" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.rowgenerator.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.scd" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.scd.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.spss" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.unifiedcomponent" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.webservice" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.webservice.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.designer.xmlmap" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.designer.xmlmap.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.expressionbuilder" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.expressionbuilder.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.help.azurestorage" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.filedelimited" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.filterrow" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.googledrive" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.jdbc" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.jira" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.marketo" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.salesforce" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.snowflake" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.help.splunk" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.generic" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.sdk.component.studio-integration" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.tos.components.feature</artifactId>

View File

@@ -1,142 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.tos.core.feature"
label="Feature"
version="7.2.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<includes
id="org.talend.commons.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.core.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.repository.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.designer.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.rcp.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.tos.components.feature"
version="0.0.0"/>
<includes
id="org.talend.hadoop.distribution.feature"
version="0.0.0"/>
<includes
id="org.talend.updates.feature"
version="0.0.0"/>
<requires>
<import plugin="org.eclipse.ui"/>
<import plugin="org.eclipse.core.runtime"/>
<import plugin="org.talend.commons.ui"/>
<import plugin="org.talend.designer.core"/>
<import plugin="org.eclipse.xsd"/>
<import plugin="org.apache.log4j"/>
<import plugin="org.talend.repository"/>
<import plugin="org.talend.core"/>
<import plugin="org.apache.axis"/>
<import plugin="javax.xml.rpc"/>
</requires>
<plugin
id="org.talend.repository.mdm"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.xsd"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.ftp"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.ftp.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.repository.mdm.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.libraries.json"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.repository.json"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.repository.json.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<plugin
id="org.talend.designer.maven.job"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="javax.transaction"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<feature id="org.talend.tos.core.feature" label="Feature" version="7.2.1.qualifier">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license url="http://www.example.com/license">[Enter License Description here.]</license>
<requires>
<import feature="org.talend.commons.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.core.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.designer.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.hadoop.distribution.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.rcp.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.repository.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.tos.components.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.updates.feature" version="0.0.0" match="greaterOrEqual"/>
<import plugin="javax.transaction" version="0.0.0" match="greaterOrEqual"/>
<import plugin="javax.xml.rpc" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.apache.axis" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.apache.log4j" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.core.runtime" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.ui" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.xsd" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.commons.ui" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.core" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.designer.core" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.talend.repository" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.libraries.json" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.repository.ftp" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.ftp.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.json" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.json.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
<plugin id="org.talend.repository.mdm" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.repository.mdm.nl" download-size="0" install-size="0" version="0.0.0" fragment="true" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.tos.core.feature</artifactId>

View File

@@ -1,60 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.tos.feature"
label="Tos feature"
version="7.2.1.qualifier"
provider-name=".Talend SA.">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license>
[Enter License Description here.]
</license>
<includes
id="org.talend.tos.core.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.help.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.designer.business.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.sbi.feature"
version="0.0.0"
search-location="self"/>
<includes
id="org.talend.spagic.feature"
version="0.0.0"
search-location="self"/>
<plugin
id="org.talend.designer.tutorials"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.designer.maven.job.nl"
download-size="0"
install-size="0"
version="0.0.0"
fragment="true"
unpack="false"/>
<feature id="org.talend.tos.feature" label="Tos feature" version="7.2.1.qualifier" provider-name=".Talend SA.">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license>[Enter License Description here.]</license>
<requires>
<import feature="org.talend.designer.business.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.help.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.sbi.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.spagic.feature" version="0.0.0" match="greaterOrEqual"/>
<import feature="org.talend.tos.core.feature" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.designer.tutorials" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.tos.feature</artifactId>

View File

@@ -1,313 +1,57 @@
<?xml version="1.0" encoding="UTF-8"?>
<feature
id="org.talend.tos.libraries.feature"
label="Libraries_feature"
version="7.2.1.qualifier">
<description url="http://www.example.com/description">
[Enter Feature Description here.]
</description>
<copyright url="http://www.example.com/copyright">
[Enter Copyright Description here.]
</copyright>
<license url="http://www.example.com/license">
[Enter License Description here.]
</license>
<includes
id="org.talend.libraries.jdbc.feature"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.common"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.axis2"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.css"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jackson"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jxplorer"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jexcel"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.salesforce"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jboss"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.excel"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.http"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.xml"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.dom4j-jaxen"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.batik"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.chemistry"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.cxf"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.lucene"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.asm"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.bonita"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.ehcache"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.apache.google"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.groovy"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jax"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jersey"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.mondrian"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.palo"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.saaj"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.xml"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.crm"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.w3c.css.sac"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.custom"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.guava"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.jetty"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.servlet"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.slf4j"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.zookeeper"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.hadoop.mapr.5.0.0"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.nattable"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.talend.libraries.netsuite"
download-size="0"
install-size="0"
version="0.0.0"/>
<plugin
id="org.eclipse.nebula.widgets.tablecombo"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.nebula.widgets.nattable.core"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.eclipse.nebula.widgets.nattable.extension.glazedlists"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.commons.beanutils"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.commons.httpclient"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.apache.commons.logging"
download-size="0"
install-size="0"
version="1.0.4.v201101211617"
unpack="false"/>
<plugin
id="org.talend.libraries.persist.lookup"
download-size="0"
install-size="0"
version="0.0.0"
unpack="false"/>
<plugin
id="org.talend.libraries.zmq"
download-size="0"
install-size="0"
version="0.0.0"/>
<feature id="org.talend.tos.libraries.feature" label="Libraries_feature" version="7.2.1.qualifier">
<description url="http://www.example.com/description">[Enter Feature Description here.]</description>
<copyright url="http://www.example.com/copyright">[Enter Copyright Description here.]</copyright>
<license url="http://www.example.com/license">[Enter License Description here.]</license>
<requires>
<import feature="org.talend.libraries.jdbc.feature" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.apache.commons.beanutils" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.apache.commons.httpclient" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.apache.commons.logging" version="1.2.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.nebula.widgets.nattable.core" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.nebula.widgets.nattable.extension.glazedlists" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.nebula.widgets.tablecombo" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.w3c.css.sac" version="0.0.0" match="greaterOrEqual"/>
</requires>
<plugin id="org.talend.libraries.apache" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.axis2" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.batik" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.chemistry" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.common" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.cxf" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.google" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.http" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.lucene" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.apache.xml" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.asm" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.crm" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.css" download-size="0" install-size="0" version="0.0.0"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.libraries.csv"/>
<plugin id="org.talend.libraries.custom" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.dom4j-jaxen" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.ehcache" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.excel" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.groovy" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.guava" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.hadoop.mapr.5.0.0" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jackson" download-size="0" install-size="0" version="0.0.0"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.libraries.javacsv"/>
<plugin id="org.talend.libraries.jax" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jboss" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jetty" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jexcel" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.jxplorer" download-size="0" install-size="0" version="0.0.0"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.libraries.mdm"/>
<plugin id="org.talend.libraries.mondrian" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.nattable" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.netsuite" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.palo" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.persist.lookup" download-size="0" install-size="0" version="0.0.0" unpack="false"/>
<plugin id="org.talend.libraries.salesforce" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.servlet" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.slf4j" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.xml" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.zmq" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.zookeeper" download-size="0" install-size="0" version="0.0.0"/>
</feature>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.tos.libraries.feature</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.abstractmap</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.alfrescooutput</artifactId>

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.business.diagram</artifactId>

View File

@@ -4,6 +4,5 @@ bin.includes = plugin.xml,\
META-INF/,\
.,\
icons/,\
resources/,\
jet_stub/,\
plugin.properties

View File

@@ -534,7 +534,7 @@
class ContextProcessing {
private void processContext_0() {
<%
for (int i = 1; i < params.size(); i++) {
for (int i = 1; i <= params.size(); i++) {
IContextParameter ctxParam = params.get(i-1);
if (i % maxContextInOneMethodToProcess == 0) {
/* close previous method and declare new */

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.codegen</artifactId>

View File

@@ -6,5 +6,4 @@ bin.includes = META-INF/,\
icons/,\
plugin.properties,\
model/,\
downloaded/,\
content/

View File

@@ -4,7 +4,7 @@
<parent>
<groupId>org.talend.studio</groupId>
<artifactId>tdi-studio-se</artifactId>
<version>7.2.1-SNAPSHOT</version>
<version>7.2.1-M2</version>
<relativePath>../../../</relativePath>
</parent>
<artifactId>org.talend.designer.components.exchange</artifactId>

View File

@@ -0,0 +1,50 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.libraries</groupId>
<artifactId>commons-net-ftps-proxy</artifactId>
<version>3.6.1-talend-20190128</version>
<name>commons-net-talend</name>
<dependencies>
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
</dependencies>
<properties>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
</properties>
<distributionManagement>
<snapshotRepository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceSnapshot/</url>
<snapshots><enabled>true</enabled></snapshots>
<releases><enabled>false</enabled></releases>
</snapshotRepository>
<repository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceRelease/</url>
<snapshots><enabled>false</enabled></snapshots>
<releases><enabled>true</enabled></releases>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,309 @@
package org.talend.ftp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Inet6Address;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSocket;
import org.apache.commons.net.ftp.FTPCmd;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.util.Base64;
public class HTTPProxyFTPSClient extends SSLSessionReuseFTPSClient {
/** Default PROT Command */
private static final String DEFAULT_PROT = "C";
private final String proxyHost;
private final int proxyPort;
private final String proxyUsername;
private final String proxyPassword;
private SSLContext context;
private String protectionLevel;
private String tunnelHost; // Save the host when setting up a tunnel (needed for EPSV)
private static final byte[] CRLF = { '\r', '\n' };
private final Base64 base64 = new Base64();
public HTTPProxyFTPSClient(boolean isImplicit, SSLContext context, String proxyHost, int proxyPort, String proxyUser,
String proxyPass) {
super(isImplicit, context);
this.proxyHost = proxyHost;
this.proxyPort = proxyPort;
this.proxyUsername = proxyUser;
this.proxyPassword = proxyPass;
this.tunnelHost = null;
this.context = context;
this.protectionLevel = DEFAULT_PROT;
}
/**
* Call execPROT from Parent class and stores current protection level
*
* @see org.apache.commons.net.ftp.FTPSClient#execPROT(String)
*/
@Override
public void execPROT(String prot) throws SSLException, IOException {
super.execPROT(prot);
this.protectionLevel = prot;
}
/**
* @see org.apache.commons.net.SocketClient#connect(java.lang.String, int)
*/
@Override
public void connect(String host, int port) throws IOException {
_socket_ = new Socket(proxyHost, proxyPort);
_input_ = _socket_.getInputStream();
_output_ = _socket_.getOutputStream();
try {
tunnelHandshake(host, port, _input_, _output_);
} catch (Exception e) {
throw new IOException("Could not connect to " + host + " using port " + port, e);
}
super._connectAction_();
}
/**
* Open ssl socket (if private protection level selected) using tunnel socket
*
* @see org.apache.commons.net.ftp.FTPSClient#_openDataConnection_(java.lang.String, java.lang.String)
*/
@Override
protected Socket _openDataConnection_(String command, String arg) throws IOException {
//Force local passive mode, active mode not supported by through proxy
if (getDataConnectionMode() != PASSIVE_LOCAL_DATA_CONNECTION_MODE) {
throw new IllegalStateException("Only passive connection mode supported using proxy");
}
final boolean isInet6Address = getRemoteAddress() instanceof Inet6Address;
String passiveHost;
// Try EPSV command first on IPv6 - and IPv4 if enabled.
// When using IPv4 with NAT it has the advantage
// to work with more rare configurations.
// E.g. if FTP server has a static PASV address (external network)
// and the client is coming from another internal network.
// In that case the data connection after PASV command would fail,
// while EPSV would make the client succeed by taking just the port.
boolean attemptEPSV = isUseEPSVwithIPv4() || isInet6Address;
if (attemptEPSV && epsv() == FTPReply.ENTERING_EPSV_MODE) {
_parseExtendedPassiveModeReply(_replyLines.get(0));
passiveHost = this.tunnelHost;
} else {
if (isInet6Address) {
return null; // Must use EPSV for IPV6
}
// If EPSV failed on IPV4, revert to PASV
if (pasv() != FTPReply.ENTERING_PASSIVE_MODE) {
return null;
}
_parsePassiveModeReply(_replyLines.get(0));
passiveHost = this.getPassiveHost();
}
return DEFAULT_PROT.equals(protectionLevel) ?
openPlainDataConnection(passiveHost, command, arg) : openEncryptedDataConnection(passiveHost, command, arg);
}
/**
* Create, configure and open SSLSocket via plain tunnel Socket
* @param passiveHost host returned from ftp server after sending PASV command
* @param command to execute
* @param arg for command
* @return SSLSocket using to Data transmit
* @throws IOException
*/
private Socket openEncryptedDataConnection(String passiveHost, String command, String arg) throws IOException {
Socket proxySocket = createTunnelSocket();
proxySocket.connect(new InetSocketAddress(proxyHost, proxyPort), getConnectTimeout());
tunnelHandshake(passiveHost, this.getPassivePort(), proxySocket.getInputStream(),
proxySocket.getOutputStream());
Socket socket = context.getSocketFactory().createSocket(proxySocket, passiveHost, this.getPassivePort(), true);
_prepareDataSocket_(socket);
configureDataSocket(socket);
if (isRestartOffsetIncorrect()) {
proxySocket.close();
socket.close();
return null;
}
if (!FTPReply.isPositivePreliminary(sendCommand(command, arg))) {
proxySocket.close();
socket.close();
return null;
}
if (socket instanceof SSLSocket) {
SSLSocket sslSocket = (SSLSocket) socket;
configureSSLDataSocket(sslSocket);
sslSocket.startHandshake();
}
return socket;
}
private Socket createTunnelSocket() throws IOException {
Socket proxySocket = new Socket();
configureDataSocket(proxySocket);
return proxySocket;
}
private void configureSSLDataSocket(SSLSocket sslSocket) {
sslSocket.setUseClientMode(getUseClientMode());
sslSocket.setEnableSessionCreation(getEnableSessionCreation());
// server mode
if (!getUseClientMode()) {
sslSocket.setNeedClientAuth(getNeedClientAuth());
sslSocket.setWantClientAuth(getWantClientAuth());
}
if (getEnabledCipherSuites() != null) {
sslSocket.setEnabledCipherSuites(getEnabledCipherSuites());
}
if (getEnabledProtocols() != null) {
sslSocket.setEnabledProtocols(getEnabledProtocols());
}
}
private void configureDataSocket(Socket socket) throws IOException {
if (getReceiveDataSocketBufferSize() > 0) {
socket.setReceiveBufferSize(getReceiveDataSocketBufferSize());
}
if (getSendDataSocketBufferSize() > 0) {
socket.setSendBufferSize(getSendDataSocketBufferSize());
}
if (getPassiveLocalIPAddress() != null) {
socket.bind(new InetSocketAddress(getPassiveLocalIPAddress(), 0));
}
}
/**
* @see org.apache.commons.net.ftp.FTPHTTPClient#_openDataConnection_(FTPCmd, String)
* @return Plain Socket using HTTP proxy
*/
private Socket openPlainDataConnection(String passiveHost, String command, String arg) throws IOException {
Socket socket = preparePlainDataTunnelSocket(passiveHost);
if (isRestartOffsetIncorrect()) {
socket.close();
return null;
}
if (!FTPReply.isPositivePreliminary(sendCommand(command, arg))) {
socket.close();
return null;
}
return socket;
}
/**
* Create, prepare and connect plain data transmit socket via tunnel proxy
*/
private Socket preparePlainDataTunnelSocket(String passiveHost) throws IOException {
Socket socket = _socketFactory_.createSocket(proxyHost, proxyPort);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
tunnelHandshake(passiveHost, this.getPassivePort(), is, os);
return socket;
}
/**
* HTTP handshake for proxy
*/
private void tunnelHandshake(String host, int port, InputStream input, OutputStream output) throws IOException {
final String connectString = "CONNECT " + host + ":" + port + " HTTP/1.1";
final String hostString = "Host: " + host + ":" + port;
this.tunnelHost = host;
output.write(connectString.getBytes(StandardCharsets.UTF_8));
output.write(CRLF);
output.write(hostString.getBytes(StandardCharsets.UTF_8));
output.write(CRLF);
if (proxyUsername != null && proxyPassword != null) {
final String auth = proxyUsername + ":" + proxyPassword;
final String header =
"Proxy-Authorization: Basic " + base64.encodeToString(auth.getBytes(StandardCharsets.UTF_8));
output.write(header.getBytes(StandardCharsets.UTF_8));
}
output.write(CRLF);
output.flush();
List<String> response = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(input, getCharset()));
String responseLine;
while ((responseLine = reader.readLine()) != null && responseLine.length() > 0) {
response.add(responseLine);
}
int size = response.size();
if (size == 0) {
throw new IOException("No response from proxy");
}
String code;
String resp = response.get(0);
if (resp.startsWith("HTTP/") && resp.length() >= 12) {
code = resp.substring(9, 12);
} else {
throw new IOException("Invalid response from proxy: " + resp);
}
if (!"200".equals(code)) {
StringBuilder msg = new StringBuilder();
msg.append("HTTPTunnelConnector: connection failed\r\n");
msg.append("Response received from the proxy:\r\n");
for (String line : response) {
msg.append(line);
msg.append("\r\n");
}
throw new IOException(msg.toString());
}
}
private boolean isRestartOffsetIncorrect() throws IOException {
return (getRestartOffset() > 0) && !restart(getRestartOffset());
}
}

View File

@@ -0,0 +1,43 @@
package org.talend.ftp;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.Socket;
import java.util.Locale;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSessionContext;
import javax.net.ssl.SSLSocket;
import org.apache.commons.net.ftp.FTPSClient;
public class SSLSessionReuseFTPSClient extends FTPSClient {
public SSLSessionReuseFTPSClient(boolean isImplicit, SSLContext context) {
super(isImplicit, context);
}
@Override
protected void _prepareDataSocket_(final Socket socket) {
if (socket instanceof SSLSocket) {
final SSLSession session = ((SSLSocket) _socket_).getSession();
final SSLSessionContext context = session.getSessionContext();
try {
final Field sessionHostPortCache = context.getClass().getDeclaredField("sessionHostPortCache");
sessionHostPortCache.setAccessible(true);
final Object cache = sessionHostPortCache.get(context);
final Method putMethod = cache.getClass().getDeclaredMethod("put", Object.class, Object.class);
putMethod.setAccessible(true);
final Method getHostMethod = socket.getClass().getDeclaredMethod("getHost");
getHostMethod.setAccessible(true);
Object host = getHostMethod.invoke(socket);
final String key =
String.format("%s:%s", host, String.valueOf(socket.getPort())).toLowerCase(Locale.ROOT);
putMethod.invoke(cache, key, session);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

View File

@@ -272,6 +272,7 @@ public class SOAPUtil {
try {
TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
Transformer t = tf.newTransformer();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
t.transform(reSoapPart.getContent(), new StreamResult(bos));

View File

@@ -24,6 +24,7 @@ import java.util.Date;
import java.util.TimeZone;
import java.util.UUID;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@@ -31,6 +32,7 @@ import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import javax.xml.xpath.XPathFactoryConfigurationException;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
@@ -43,6 +45,7 @@ import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Logger;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
@@ -215,7 +218,13 @@ public final class WsdlTokenManager {
Document document = builder.parse(new ByteArrayInputStream(inputXML.getBytes()));
XPath xpath = XPathFactory.newInstance().newXPath();
XPathFactory xpf = XPathFactory.newInstance();
try {
xpf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
} catch (XPathFactoryConfigurationException ex) {
ExceptionHandler.process(ex);
}
XPath xpath = xpf.newXPath();
String expression = xPathQuery;
Node cipherValue = (Node) xpath.evaluate(expression, document, XPathConstants.NODE);
return cipherValue == null ? null : cipherValue.getTextContent();

View File

@@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8"?>
<project name="org.talend.designer.components.libs" default="process" basedir=".">
<property name="component.plugin.home" value="../../../org.talend.designer.components.localprovider/components" />
<!-- #################################################### -->
<!-- modification 1: config -->
<property name="jar.name" value="talend-ws-1.0.jar" />
<property name="component.name" value="tWebService" />
<property name="author.name" value="bchen" />
<!-- modification 2: compile classpath -->
<path id="compile.classpath">
<pathelement location="${component.plugin.home}/tAlfrescoOutput/commons-codec-1.3.jar" />
<pathelement location="${component.plugin.home}/tMicrosoftCrmInput/commons-httpclient-3.1.jar" />
<pathelement location="${component.plugin.home}/tMicrosoftCrmInput/geronimo-stax-api_1.0_spec-1.0.1.jar" />
<pathelement location="${component.plugin.home}/tMicrosoftCrmInput/commons-logging-1.1.1.jar" />
<pathelement location="${component.plugin.home}/tWriteJSONFieldIn/commons-lang-2.6.jar" />
<pathelement location="${component.plugin.home}/tWebService/commons-collections-3.2.1.jar" />
<pathelement location="${component.plugin.home}/tWebService/commons-beanutils-1.7.0.jar" />
<pathelement location="${component.plugin.home}/tWebService/cxf-2.6.0-modified.jar" />
<pathelement location="${component.plugin.home}/tWebService/jaxb-xjc-2.2.5-modified.jar" />
<pathelement location="${component.plugin.home}/tWebService/jaxb-impl-2.2.5-modified.jar" />
<pathelement location="${component.plugin.home}/tWebService/wsdl4j-1.6.2.jar" />
<pathelement location="${component.plugin.home}/tWebService/xmlschema-core-2.0.2.jar" />
<pathelement location="${component.plugin.home}/tWebService/geronimo-annotation_1.0_spec-1.1.1.jar" />
<pathelement location="${component.plugin.home}/tWebService/geronimo-ws-metadata_2.0_spec-1.1.3.jar" />
<pathelement location="${component.plugin.home}/tWebService/geronimo-jaxws_2.2_spec-1.1.jar" />
<pathelement location="${component.plugin.home}/tWebService/woodstox-core-asl-4.1.2.jar" />
<pathelement location="${component.plugin.home}/tWebService/saaj-impl-1.3.18.jar" />
<pathelement location="${component.plugin.home}/tWebService/asm-3.3.1.jar" />
<pathelement location="${component.plugin.home}/tWebService/neethi-3.0.2.jar" />
<pathelement location="${component.plugin.home}/tWebService/saaj-api-1.3.4.jar" />
<pathelement location="${component.plugin.home}/tWebService/stax2-api-3.1.1.jar" />
<pathelement location="${component.plugin.home}/tWebService/velocity-1.7.jar" />
<pathelement location="${component.plugin.home}/tWebServiceInput/activation.jar" />
<pathelement location="${component.plugin.home}/tWebServiceInput/mail.jar" />
</path>
<!-- #################################################### -->
<!-- sourcecode and final jar path -->
<property name="source.home" value="." />
<property name="jar.home" value="${component.plugin.home}/${component.name}/${jar.name}" />
<!-- temp dir for clasee files -->
<property name="build.dir" value="../../build" />
<!-- compile option -->
<property name="compile.debug" value="true" />
<property name="compile.deprecation" value="false" />
<property name="compile.optimize" value="true" />
<target name="process" description="prepare a temp dir">
<antcall target="prepare" />
<antcall target="compile" />
<antcall target="clean" />
</target>
<target name="prepare" description="prepare a temp dir">
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
<mkdir dir="${build.dir}/classes" />
</target>
<target name="compile" description="Compile Java sources">
<!-- compile -->
<javac srcdir="${source.home}" destdir="${build.dir}/classes" debug="${compile.debug}" deprecation="${compile.deprecation}" optimize="${compile.optimize}">
<classpath refid="compile.classpath" />
</javac>
<!-- include source code -->
<copy todir="${build.dir}/classes">
<fileset dir="${source.home}">
<exclude name="build.xml" />
</fileset>
</copy>
<!-- make jar -->
<tstamp>
<format property="date" pattern="yyyy-MM-dd HH:mm:ss" />
</tstamp>
<jar destfile="${build.dir}/${jar.name}" basedir="${build.dir}/classes">
<manifest>
<!-- who -->
<attribute name="Built-By" value="${author.name}" />
<!-- when -->
<attribute name="Built-Date" value="${date}"/>
<!-- JDK version -->
<attribute name="Created-By" value="${java.version} (${java.vendor})" />
<!-- Information about the program itself -->
<attribute name="Implementation-Vendor" value="Talend SA" />
<attribute name="Implementation-Title" value="${jar.name}" />
<attribute name="Implementation-Version" value="1.0" />
</manifest>
</jar>
<!-- move jar -->
<move file="${build.dir}/${jar.name}" tofile="${jar.home}" />
</target>
<target name="clean" description="clean the temp dir">
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
</target>
</project>

View File

@@ -0,0 +1,254 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.libraries</groupId>
<artifactId>talend-ws</artifactId>
<version>1.0.1-20190117</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<cxf.version>3.1.1</cxf.version>
<odata.version>4.3.0</odata.version>
<slf4j.version>1.7.12</slf4j.version>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
</properties>
<distributionManagement>
<snapshotRepository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceSnapshot/</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
<releases>
<enabled>false</enabled>
</releases>
</snapshotRepository>
<repository>
<id>talend_nexus_deployment</id>
<url>${talend.nexus.url}/nexus/content/repositories/TalendOpenSourceRelease/</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</distributionManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-httpclient/commons-httpclient -->
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.codehaus.woodstox/stax2-api -->
<dependency>
<groupId>org.codehaus.woodstox</groupId>
<artifactId>stax2-api</artifactId>
<version>4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.geronimo.specs/geronimo-stax-api_1.0_spec -->
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-stax-api_1.0_spec</artifactId>
<version>1.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-core</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-simple</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-tools-common</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-wsdl</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-bindings-soap</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-databinding-jaxb</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>jaxb-xjc-2.2.6-modified</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>activation</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>mail</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.ws.xmlschema</groupId>
<artifactId>xmlschema-core</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.woodstox</groupId>
<artifactId>woodstox-core</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>saaj-api</artifactId>
<version>1.3.4</version>
</dependency>
<dependency>
<groupId>com.sun.xml.messaging.saaj</groupId>
<artifactId>saaj-impl</artifactId>
<version>1.3.18</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.neethi</groupId>
<artifactId>neethi</artifactId>
<version>3.0.2</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>talend_open</id>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>https://artifacts-oss.talend.com/nexus/content/repositories/TalendOpenSourceRelease/</url>
</repository>
<repository>
<id>talend_open_snapshots</id>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>https://artifacts-oss.talend.com/nexus/content/repositories/TalendOpenSourceSnapshot/</url>
</repository>
<repository>
<id>releases</id>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>https://artifacts-zl.talend.com/nexus/content/repositories/releases/</url>
</repository>
<repository>
<id>snapshots</id>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
<url>https://artifacts-zl.talend.com/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>talend-update</id>
<url>https://talend-update.talend.com/nexus/content/repositories/libraries/</url>
</repository>
</repositories>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

View File

@@ -0,0 +1,51 @@
1. (2009-10-16 modify by wyang) to close the verbose in console
Retrieving document at http://euro2008.dataaccess.eu/footballpoolwebservice.wso?WSDL'.
ServiceDiscoveryHelper.java
please @see talend-ws-1.0.jar\org\talend\ws\helper\ServiceDiscoveryHelper.java
2.(2009-10-20 modify by bchen) to work for this webservice: 'http://euro2008.dataaccess.eu/footballpoolwebservice.wso?WSDL'
ListPropertyMapper.java
SimplePropertyMapper.java
please @see talend-ws-1.0.jar\org\talend\ws\mapper\ListPropertyMapper.java
talend-ws-1.0.jar\org\talend\ws\mapper\SimplePropertyMapper.java
3.(2009-11-18 modified by bchen) fixed bug 9900
for wrap type of webservice: update to cxf-2.2.4.jar, jaxb-xjc-2.1.12.jar and jaxb-impl-2.1.12.jar.
modified ListPropertyMapper.java
for bare type of webservice: modified ServiceInvokerHelper.java
please @see talend-ws-1.0.jar\org\talend\ws\mapper\ListPropertyMapper.java
talend-ws-1.0.jar\org\talend\ws\helper\ServiceInvokerHelper.java
4.(2009-11-18 modified by bchen) support for this webservice:http://www.ebi.ac.uk/intact/binary-search-ws/binarysearch?wsdl
consider the situation about no targetnamespace in schema
modified ServiceInvokerHelper.java
please @see talend-ws-1.0.jar\org\talend\ws\helper\ServiceInvokerHelper.java
5.(2009-11-23 modified by bchen) fiexd bug 8674
please @see org\talend\ws\helper\ServiceDiscoveryHelper.java
org\talend\ws\helper\ServiceInvokerHelper.java
6.(2010-01-05 modified by bchen) fiexd bug 8674
please @see org\talend\ws\helper\ServiceDiscoveryHelper.java
org\talend\ws\helper\ServiceInvokerHelper.java
7.(2010-02-01 modified by bchen) fixed bug 11351
8.(2010-02-23 modified by bchen) fixed bug 11351 add an ability to config temporary path for wsdl file.
9.(2010-03-16 modified by bchen) fixed bug 11917
please @see org\talend\ws\helper\ServiceInvokerHelper.java
org\talend\ws\mapper\MapperFactory.java
10.(2019-01-18 modified by dchmyga) fixed TDI-41647

View File

@@ -0,0 +1,21 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.exception;
/**
*
* @author rlamarche
*/
public class IllegalPropertyAccessException extends LocalizedException {
/**
* Constructs an instance of <code>IllegalPropertyAccessException</code> with the specified detail message.
* @param msg the detail message.
*/
public IllegalPropertyAccessException(String property, String clazz, IllegalAccessException ex) {
super("org.talend.ws.exception.IllegalPropertyAccessException", new String[] {property, clazz}, ex);
}
}

View File

@@ -0,0 +1,28 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.exception;
/**
*
* @author rlamarche
*/
public class InvalidEnumValueException extends LocalizedException {
/**
* Constructs an instance of <code>InvalidEnumValueException</code> with the specified detail message.
* @param msg the detail message.
*/
public InvalidEnumValueException(String value, String enumeration) {
super("org.talend.ws.exception.InvalidEnumValueException", new String[]{value, enumeration});
}
public String getValue() {
return (String) arguments[0];
}
public String getEnum() {
return (String) arguments[1];
}
}

View File

@@ -0,0 +1,28 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.exception;
/**
*
* @author rlamarche
*/
public class InvocationTargetPropertyAccessor extends LocalizedException {
/**
* Constructs an instance of <code>NoSuchPropertyException</code> with the specified detail message.
* @param msg the detail message.
*/
public InvocationTargetPropertyAccessor(String property, String clazz, Throwable ex) {
super("org.talend.ws.exception.InvocationTargetPropertyAccessor", new String[]{property, clazz}, ex);
}
public String getProperty() {
return (String) arguments[0];
}
public String getClazz() {
return (String) arguments[1];
}
}

View File

@@ -0,0 +1,71 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.exception;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
/**
*
* @author rlamarche
*/
public class LocalizedException extends Exception {
protected Object[] arguments;
private static ResourceBundle messages;
static {
messages = ResourceBundle.getBundle("messages");
}
/**
* Creates a new instance of <code>LocalizedException</code> without detail message.
*/
public LocalizedException() {
}
public LocalizedException(String msg, Throwable cause) {
super(msg, cause);
}
public LocalizedException(String msg, Object[] arguments, Throwable cause) {
super(msg, cause);
this.arguments = arguments;
}
public LocalizedException(String msg) {
super(msg);
}
/**
* Constructs an instance of <code>LocalizedException</code> with the specified detail message.
* @param msg the detail message.
*/
public LocalizedException(String msg, Object[] arguments) {
this(msg);
this.arguments = arguments;
}
@Override
public String getLocalizedMessage() {
String msg = getMessage();
if (msg != null) {
msg = messages.getString(msg);
if (msg == null) {
return getMessage();
} else {
if (arguments == null) {
return msg;
} else {
return MessageFormat.format(msg, arguments);
}
}
} else {
return null;
}
}
}

View File

@@ -0,0 +1,21 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.exception;
/**
*
* @author rlamarche
*/
public class NoSuchPropertyException extends LocalizedException {
/**
* Constructs an instance of <code>NoSuchPropertyException</code> with the specified detail message.
* @param msg the detail message.
*/
public NoSuchPropertyException(String property, String clazz, NoSuchMethodException ex) {
super("org.talend.ws.exception.NoSuchPropertyException", new String[] {property, clazz}, ex);
}
}

View File

@@ -0,0 +1,191 @@
// ============================================================================
//
// Copyright (C) 2006-2018 Talend Inc. - www.talend.com
//
// This source code is available under agreement available at
// %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt
//
// You should have received a copy of the agreement
// along with this program; if not, write to Talend SA
// 9 rue Pages 92150 Suresnes, France
//
// ============================================================================
package org.talend.webservice.helper;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.ArrayUtils;
/**
* created by wwang on 2013-1-10
* util to procss the path string
*
*/
public class PathUtil {
/**
*
* It is like String.indexOf(String),but not process the :anytype{*} part
* @param path
* @param sep
* @return
*/
public static int indexOfPath(String path,String sep) {
if(path == null || sep == null || sep.length() == 0) {
return -1;
}
if(sep.contains(":") || sep.contains("{") || sep.contains("}")) {
throw new RuntimeException("separator can't contain :,{,}");
}
char first = sep.charAt(0);
boolean isTypeDefine = false;
for(int i=0;i<path.length();i++) {
char c = path.charAt(i);
if(c == '{') {
isTypeDefine = true;
} else if(c == '}') {
isTypeDefine = false;
}
if(c != first) {
while (++i < path.length()) {
char ch = path.charAt(i);
if(!isTypeDefine && (ch == first)) {//look for the first char that is not in type define substring.
break;
}
if(ch == '{') {
isTypeDefine = true;
} else if(ch == '}') {
isTypeDefine = false;
}
};
}
if (i < path.length()) {//look for the rest that is not in type define substring.
int j = i + 1;
int end = j + sep.length() - 1;
for (int k = 1; j < end && path.charAt(j) ==
sep.charAt(k); j++, k++);
if (j == end) {
return i;
}
}
}
return -1;
}
/**
*
* It is like org.apache.commons.lang.StringUtils.split(String,String),but not process the :anytype{*} part
* @param path
* @param sep
* @return
*/
public static String[] splitPath(String path, String separatorChars) {
if (path == null) {
return null;
}
int len = path.length();
if (len == 0) {
return ArrayUtils.EMPTY_STRING_ARRAY;
}
List list = new ArrayList();
int i = 0, start = 0;
boolean match = false;
boolean lastMatch = false;
boolean isTypeDefine = false;
if (separatorChars == null) {
// Null separator means use whitespace
while (i < len) {
char c = path.charAt(i);
if(c == '{') {
isTypeDefine = true;
} else if(c == '}') {
isTypeDefine = false;
}
if (Character.isWhitespace(c) && !isTypeDefine) {
if (match) {
lastMatch = true;
list.add(path.substring(start, i));
match = false;
}
start = ++i;
continue;
}
lastMatch = false;
match = true;
i++;
}
} else if (separatorChars.length() == 1) {
// Optimise 1 character case
char sep = separatorChars.charAt(0);
while (i < len) {
char c = path.charAt(i);
if(c == '{') {
isTypeDefine = true;
} else if(c == '}') {
isTypeDefine = false;
}
if ((c == sep) && !isTypeDefine) {
if (match) {
lastMatch = true;
list.add(path.substring(start, i));
match = false;
}
start = ++i;
continue;
}
lastMatch = false;
match = true;
i++;
}
} else {
// standard case
while (i < len) {
char c = path.charAt(i);
if(c == '{') {
isTypeDefine = true;
} else if(c == '}') {
isTypeDefine = false;
}
if ((separatorChars.indexOf(c) >= 0) && !isTypeDefine) {
if (match) {
lastMatch = true;
list.add(path.substring(start, i));
match = false;
}
start = ++i;
continue;
}
lastMatch = false;
match = true;
i++;
}
}
if (match) {
list.add(path.substring(start, i));
}
return (String[]) list.toArray(new String[list.size()]);
}
}

View File

@@ -0,0 +1,467 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.helper;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import javax.wsdl.Definition;
import javax.wsdl.Import;
import javax.wsdl.Types;
import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.schema.Schema;
import javax.wsdl.extensions.schema.SchemaImport;
import javax.wsdl.extensions.schema.SchemaReference;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.talend.webservice.helper.conf.ServiceHelperConfiguration;
import org.talend.webservice.helper.conf.WSDLLocatorImpl;
import org.w3c.dom.Element;
import com.ibm.wsdl.Constants;
import com.ibm.wsdl.extensions.schema.SchemaConstants;
import com.ibm.wsdl.util.xml.DOMUtils;
import com.ibm.wsdl.util.xml.QNameUtils;
/**
* This helper allow easy discovery of services and types
*
* @author rlamarche
*/
public class ServiceDiscoveryHelper {
private String wsdlUri;
private WSDLFactory wsdlFactory;
private ServiceHelperConfiguration configuration;
private File wsdlTmpDir;
private Map<String, Definition> definitions;
private XmlSchemaCollection schemaCollection;
private Set<String> namespaces;
private final String LOCAL_WSDL_NAME = "mainWSDL.wsdl";
public ServiceDiscoveryHelper(String wsdlUri) throws WSDLException, IOException, TransformerException, URISyntaxException {
this(wsdlUri, null, null);
}
public ServiceDiscoveryHelper(String wsdlUri, String tempPath) throws WSDLException, IOException, TransformerException,
URISyntaxException {
this(wsdlUri, null, tempPath);
}
public ServiceDiscoveryHelper(String wsdlUri, ServiceHelperConfiguration configuration) throws WSDLException, IOException,
TransformerException, URISyntaxException {
this(wsdlUri, configuration, null);
}
public ServiceDiscoveryHelper(String wsdlUri, ServiceHelperConfiguration configuration, String tempPath)
throws WSDLException, IOException, TransformerException, URISyntaxException {
this.wsdlUri = wsdlUri;
this.configuration = configuration;
this.wsdlTmpDir = createTempWsdlDir(tempPath);
init();
}
private File createTempWsdlDir(String tempPath) {
File tmpWsdlDir;
if (tempPath != null && !"".equals(tempPath)) {
tmpWsdlDir = new File(tempPath, "wsdl" + String.valueOf(new Date().getTime()) + Thread.currentThread().getId());
} else {
tmpWsdlDir = new File(System.getProperty("java.io.tmpdir"), "wsdl" + String.valueOf(new Date().getTime()) + Thread.currentThread().getId());
}
if (!tmpWsdlDir.mkdir()) {
throw new SecurityException("Unable to create temporary directory," + tmpWsdlDir.getAbsolutePath());
}
tmpWsdlDir.deleteOnExit();
return tmpWsdlDir;
}
/**
* Read the wsdl and schema
*
* @throws javax.wsdl.WSDLException
* @throws TransformerException
* @throws URISyntaxException
*/
private void init() throws WSDLException, IOException, TransformerException, URISyntaxException {
wsdlFactory = WSDLFactory.newInstance();
WSDLReader newWSDLReader = wsdlFactory.newWSDLReader();
newWSDLReader.setFeature(com.ibm.wsdl.Constants.FEATURE_VERBOSE, false);
Definition definition;
URI wsdlURI = new URI(wsdlUri);
if (configuration != null && wsdlURI.getScheme().startsWith("http")) {
definition = newWSDLReader.readWSDL(configuration.createWSDLLocator(wsdlUri));
} else {
definition = newWSDLReader.readWSDL(wsdlUri);
}
Map<String, Definition> defs = new HashMap<String, Definition>();
defs.put(LOCAL_WSDL_NAME, definition);
List<String> importKeys = new LinkedList<String>();
String parentLoc = absoluteLocation(null, wsdlUri);
importKeys.add(definition.getTargetNamespace() + " " + parentLoc);
definitions = findWsdlImport(definition, parentLoc, defs, importKeys);
schemaCollection = getSchemaCollection(definitions);
namespaces = collectNamespaces();
generateTempWsdlFile();
}
private void generateTempWsdlFile() throws FileNotFoundException, WSDLException, TransformerException, URISyntaxException {
generateImportAndIncludeXsd(definitions);
for (Object key : definitions.keySet()) {
File importFile = new File(wsdlTmpDir, key.toString());
importFile.deleteOnExit();
wsdlFactory.newWSDLWriter().writeWSDL(definitions.get(key), new FileOutputStream(importFile));
}
}
@SuppressWarnings("unchecked")
private void generateImportAndIncludeXsd(Map<String, Definition> definitions) throws FileNotFoundException,
TransformerException, URISyntaxException {
Map<String, Types> typesList = getTypesFromWsdl(definitions);
Map<String, String> schemaIDs = null;
for (Object key : typesList.keySet()) {
Types types = typesList.get(key);
if (types != null) {
List<ExtensibilityElement> extensibilityElements = types.getExtensibilityElements();
for (ExtensibilityElement el : extensibilityElements) {
if (el instanceof Schema) {
Schema schema = (Schema) el;
if (schemaIDs == null) {
schemaIDs = new HashMap<String, String>();
schemaIDs.put(schema.getDocumentBaseURI(), key.toString());
}
createTempImportSchemaFile(schema, schemaIDs);
}
}
}
}
}
@SuppressWarnings("unchecked")
private void createTempImportSchemaFile(Schema schema, Map<String, String> schemaIDs) throws FileNotFoundException,
TransformerException, URISyntaxException {
if (schema.getImports() != null) {
Iterator<?> importSchemaIte = schema.getImports().values().iterator();
while (importSchemaIte.hasNext()) {
List<?> importSchemaList = (List<?>) importSchemaIte.next();
for (Object importSchemaObj : importSchemaList) {
if (importSchemaObj instanceof SchemaImport) {
SchemaImport importSchema = (SchemaImport) importSchemaObj;
String schId = importSchema.getId();
String schNS = importSchema.getNamespaceURI();
String schLocUri = importSchema.getSchemaLocationURI();
Schema refSchema = importSchema.getReferencedSchema();
createTempImportSchemaFile(schema, schLocUri, schNS, schId, refSchema, schemaIDs);
}
}
}
}
if (schema.getIncludes() != null || schema.getRedefines() != null) {
List<SchemaReference> includes = new ArrayList<SchemaReference>();
if (schema.getIncludes() != null && !schema.getIncludes().isEmpty()) {
includes.addAll(schema.getIncludes());
}
if (schema.getRedefines() != null && !schema.getRedefines().isEmpty()) {
includes.addAll(schema.getRedefines());
}
for (SchemaReference include : includes) {
Schema refSchema = include.getReferencedSchema();
String schId = include.getId();
String schLocUri = include.getSchemaLocationURI();
createTempImportSchemaFile(schema, schLocUri, null, schId, refSchema, schemaIDs);
}
}
}
private void createTempImportSchemaFile(Schema schema, String schLocUri, String schNS, String schId, Schema refSchema,
Map<String, String> schemaIDs) throws FileNotFoundException, TransformerException, URISyntaxException {
if (schLocUri != null && refSchema != null) {
if (!schemaIDs.containsKey(refSchema.getDocumentBaseURI())) {
String xsdFileName = "schemaXSD" + schemaIDs.size() + ".xsd";
schemaIDs.put(refSchema.getDocumentBaseURI(), xsdFileName);
// lookup child import wsdl
createTempImportSchemaFile(refSchema, schemaIDs);
// create current wsdl
createTempXSDFile(refSchema, xsdFileName);
// modified the parent wsdl
changeImportXsdLocation(schema, schId, schNS, schLocUri, xsdFileName);
} else {
changeImportXsdLocation(schema, schId, schNS, schLocUri, schemaIDs.get(refSchema.getDocumentBaseURI()));
// only remove the duplicate XSD:IMPORT, for bug[http://jira.talendforge.org/browse/TDI-18573]
removeImportXsdLocation(schema, schId, schNS, schemaIDs.get(refSchema.getDocumentBaseURI()));
}
}
}
private void createTempXSDFile(Schema sourceSchema, String xsdFileName) throws FileNotFoundException, TransformerException {
Element e = sourceSchema.getElement();
DOMSource domSource = new DOMSource(e);
File xsdFile = new File(this.wsdlTmpDir, xsdFileName);
FileOutputStream fileOutputStream = new FileOutputStream(xsdFile);
StreamResult streamResult = new StreamResult(fileOutputStream);
TransformerFactory tf = TransformerFactory.newInstance();
tf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
Transformer transformer = tf.newTransformer();
transformer.transform(domSource, streamResult);
}
private void removeImportXsdLocation(Schema schema, String id, String ns, String location) {
Element schemaElem = schema.getElement();
Element tempEl = DOMUtils.getFirstChildElement(schemaElem);
for (; tempEl != null; tempEl = DOMUtils.getNextSiblingElement(tempEl)) {
QName tempElType = QNameUtils.newQName(tempEl);
if (SchemaConstants.XSD_IMPORT_QNAME_LIST.contains(tempElType)) {
if ((DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_ID) == null ? id == null : DOMUtils.getAttribute(tempEl,
SchemaConstants.ATTR_ID).equals(id))
&& (DOMUtils.getAttribute(tempEl, Constants.ATTR_NAMESPACE) == null ? ns == null : DOMUtils.getAttribute(
tempEl, Constants.ATTR_NAMESPACE).equals(ns))
&& (DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION) == null ? location == null
: DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION).equals(location))) {
schemaElem.removeChild(tempEl);
}
}
}
}
private void changeImportXsdLocation(Schema schema, String id, String ns, String location, String newXSDFileName) {
Element schemaElem = schema.getElement();
Element tempEl = DOMUtils.getFirstChildElement(schemaElem);
for (; tempEl != null; tempEl = DOMUtils.getNextSiblingElement(tempEl)) {
QName tempElType = QNameUtils.newQName(tempEl);
if (SchemaConstants.XSD_IMPORT_QNAME_LIST.contains(tempElType)
|| SchemaConstants.XSD_INCLUDE_QNAME_LIST.contains(tempElType)
|| SchemaConstants.XSD_REDEFINE_QNAME_LIST.contains(tempElType)) {
if ((DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_ID) == null ? id == null : DOMUtils.getAttribute(tempEl,
SchemaConstants.ATTR_ID).equals(id))
&& (DOMUtils.getAttribute(tempEl, Constants.ATTR_NAMESPACE) == null ? ns == null : DOMUtils.getAttribute(
tempEl, Constants.ATTR_NAMESPACE).equals(ns))
&& (DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION) == null ? location == null
: DOMUtils.getAttribute(tempEl, SchemaConstants.ATTR_SCHEMA_LOCATION).equals(location))) {
tempEl.getAttributeNode(SchemaConstants.ATTR_SCHEMA_LOCATION).setValue(newXSDFileName);
}
}
}
}
private Map<String, Definition> findWsdlImport(Definition definition, String parentLocation,
Map<String, Definition> definitions, List<String> importKeys) {
if (definition.getImports() != null && !definition.getImports().isEmpty()) {
Map<?, ?> imports = definition.getImports();
List<Import> importsToRemove = new LinkedList<Import>();
for (Map.Entry<?, ?> entry : imports.entrySet()) {
String namespace = (String) entry.getKey();
Vector<?> importsVector = (Vector<?>) entry.getValue();
for (Object importObj : importsVector) {
Import importDecl = (Import) importObj;
String importLoc = absoluteLocation(parentLocation, importDecl.getLocationURI());
String importKey = namespace + " " + importLoc;
if (importKeys.contains(importKey)) {
importsToRemove.add(importDecl);
} else {
importKeys.add(importKey);
String importWsdlFileName = "importWsdl" + definitions.size() + ".wsdl";
Definition importDef = importDecl.getDefinition();
if (importDef != null) {
definitions.put(importWsdlFileName, importDef);
findWsdlImport(importDef, importLoc, definitions, importKeys);
}
importDecl.setLocationURI(importWsdlFileName);
}
}
}
if (!importsToRemove.isEmpty()) {
for (Import importToRemove : importsToRemove) {
definition.removeImport(importToRemove);
}
}
}
return definitions;
}
@SuppressWarnings("unchecked")
private XmlSchemaCollection getSchemaCollection(Map<String, Definition> definitions) throws FileNotFoundException,
TransformerException, URISyntaxException {
XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
Map<String, Types> typesList = getTypesFromWsdl(definitions);
int tmpCount = 0;
String tmpTNName = "";
for (Object key : typesList.keySet()) {
Types types = typesList.get(key);
if (types != null) {
List<ExtensibilityElement> extensibilityElements = types.getExtensibilityElements();
for (ExtensibilityElement el : extensibilityElements) {
if (el instanceof Schema) {
Schema schema = (Schema) el;
// for bug 8674
// set base uri for relative path in schemaLocation.
schemaCollection.setBaseUri(schema.getDocumentBaseURI());
// synthetic URI for the schemas without targetNamespace,avoid conflict error.
if (schema.getElement().getAttributeNode("targetNamespace") == null) {
tmpTNName = schema.getDocumentBaseURI() + "#type" + tmpCount;
schemaCollection.read(schema.getElement(), tmpTNName);
tmpCount++;
} else {
schemaCollection.read(schema.getElement());
}
}
}
}
}
return schemaCollection;
}
private Map<String, Types> getTypesFromWsdl(Map<String, Definition> importDefinitions) {
Map<String, Types> typesList = new HashMap<String, Types>();
for (Object key : importDefinitions.keySet()) {
Definition importDef = importDefinitions.get(key);
if (importDef != null) {
if (importDef.getTypes() != null) {
typesList.put(key.toString(), importDef.getTypes());
}
}
}
return typesList;
}
@SuppressWarnings("unchecked")
private Set<String> collectNamespaces() {
Set<String> namespaces = new HashSet<String>();
for (Object key : definitions.keySet()) {
Set<Map.Entry<String, String>> entrySet = definitions.get(key).getNamespaces().entrySet();
for (Map.Entry<String, String> entry : entrySet) {
if (namespaces.contains(entry.getValue())) {
continue;
}
namespaces.add(entry.getValue());
}
}
// some targetnamespace in schema missing in definitions,code for bug 9900 (for bare webservice)
if (schemaCollection != null) {
org.apache.ws.commons.schema.XmlSchema[] xs = schemaCollection.getXmlSchemas();
if (xs != null) {
for (org.apache.ws.commons.schema.XmlSchema x : xs) {
if (namespaces.contains(x.getTargetNamespace()) || x.getTargetNamespace() == null) {
continue;
}
namespaces.add(x.getTargetNamespace());
}
}
}
return namespaces;
}
/**
* Return the parsed wsdl, it contains all services
*
* @return
*/
public Definition getDefinition() {
return definitions.get(this.LOCAL_WSDL_NAME);
}
/**
* Return the xml schema collection
*
* @return
*/
public XmlSchemaCollection getSchema() {
return schemaCollection;
}
public String getWsdlUri() {
return wsdlUri;
}
public String getLocalWsdlUri() {
return new File(wsdlTmpDir, this.LOCAL_WSDL_NAME).toURI().toString();
}
public Set<String> getNamespaces() {
return namespaces;
}
private static String absoluteLocation(String parentLocation, String wsdlLocation) {
try {
return WSDLLocatorImpl.getURL(parentLocation, wsdlLocation).toExternalForm();
} catch (MalformedURLException e) {
return "NOLOCATION";
}
}
}

View File

@@ -0,0 +1,351 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.helper;
import java.beans.PropertyDescriptor;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import javax.wsdl.Input;
import javax.wsdl.Message;
import javax.wsdl.Operation;
import javax.wsdl.Output;
import javax.wsdl.Port;
import javax.wsdl.Service;
import javax.wsdl.WSDLException;
import javax.xml.bind.annotation.XmlSchema;
import javax.xml.bind.annotation.XmlType;
import javax.xml.namespace.QName;
import javax.xml.transform.TransformerException;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.dynamic.DynamicClientFactory;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.ws.commons.schema.XmlSchemaType;
import org.talend.webservice.exception.LocalizedException;
import org.talend.webservice.helper.conf.ServiceHelperConfiguration;
import org.talend.webservice.helper.map.MapConverter;
import org.talend.webservice.jaxb.JAXBUtils;
import org.talend.webservice.jaxb.JAXBUtils.IdentifierType;
import org.talend.webservice.mapper.AnyPropertyMapper;
import org.talend.webservice.mapper.ClassMapper;
import org.talend.webservice.mapper.EmptyMessageMapper;
import org.talend.webservice.mapper.MapperFactory;
import org.talend.webservice.mapper.MessageMapper;
/**
*
* @author rlamarche
*/
public class ServiceInvokerHelper implements ClassMapper {
private ServiceDiscoveryHelper serviceDiscoveryHelper;
private DynamicClientFactory dynamicClientFactory;
private final String packagePrefix;
private Map<String, String> namespacePackageMap;
private Map<String, String> packageNamespaceMap;
private Map<QName, Map<QName, Client>> clients;
private List<String> bindingFiles;
private Map<Message, MessageMapper> mappers;
private MapperFactory mapperFactory;
private ServiceHelperConfiguration configuration;
protected ServiceInvokerHelper() {
packagePrefix = "tmp" + (String.valueOf((new Random(Calendar.getInstance().getTimeInMillis())).nextInt()).substring(1));
dynamicClientFactory = DynamicClientFactory.newInstance();
namespacePackageMap = new HashMap<String, String>();
packageNamespaceMap = new HashMap<String, String>();
clients = new HashMap<QName, Map<QName, Client>>();
mappers = new HashMap<Message, MessageMapper>();
}
public ServiceInvokerHelper(String wsdlUri) throws WSDLException, IOException, TransformerException, URISyntaxException {
this(new ServiceDiscoveryHelper(wsdlUri));
}
public ServiceInvokerHelper(String wsdlUri, String tempPath) throws WSDLException, IOException, TransformerException,
URISyntaxException {
this(new ServiceDiscoveryHelper(wsdlUri, tempPath));
}
public ServiceInvokerHelper(String wsdlUri, ServiceHelperConfiguration configuration) throws WSDLException, IOException,
TransformerException, URISyntaxException {
this(new ServiceDiscoveryHelper(wsdlUri, configuration));
}
public ServiceInvokerHelper(String wsdlUri, ServiceHelperConfiguration configuration, String tempPath) throws WSDLException,
IOException, TransformerException, URISyntaxException {
this(new ServiceDiscoveryHelper(wsdlUri, configuration, tempPath), configuration);
}
public ServiceInvokerHelper(ServiceDiscoveryHelper serviceDiscoveryHelper, ServiceHelperConfiguration configuration) {
this(serviceDiscoveryHelper);
this.configuration = configuration;
}
public ServiceInvokerHelper(ServiceDiscoveryHelper serviceDiscoveryHelper) {
this();
this.serviceDiscoveryHelper = serviceDiscoveryHelper;
Set<String> namespaces = serviceDiscoveryHelper.getNamespaces();
bindingFiles = new ArrayList<String>(namespaces.size());
for (String ns : namespaces) {
String packageName = packagePrefix + JAXBUtils.namespaceURIToPackage(ns);
namespacePackageMap.put(ns, packageName);
packageNamespaceMap.put(packageName, ns);
File f = org.apache.cxf.tools.util.JAXBUtils.getPackageMappingSchemaBindingFile(ns, packageName);
f.deleteOnExit();
bindingFiles.add(f.getAbsolutePath());
}
mapperFactory = new MapperFactory(this, serviceDiscoveryHelper.getSchema());
}
public Client getClient(QName service, QName port) {
Map<QName, Client> serviceClients = clients.get(service);
if (serviceClients == null) {
serviceClients = new HashMap<QName, Client>();
clients.put(service, serviceClients);
}
if (serviceClients.get(port) == null) {
serviceClients.put(port, createClient(service, port));
}
return serviceClients.get(port);
}
protected Client createClient(QName service, QName port) {
// bug 8674
Client client = dynamicClientFactory.createClient(serviceDiscoveryHelper.getLocalWsdlUri(), service, Thread
.currentThread().getContextClassLoader(), port, bindingFiles);
// end
HTTPConduit conduit = (HTTPConduit) client.getConduit();
if (configuration != null) {
configuration.configureHttpConduit(conduit);
}
return client;
}
private MessageMapper getMessageMapper(Message message) throws LocalizedException {
MessageMapper messageMapper = mappers.get(message);
if (messageMapper == null) {
messageMapper = createMessageMapper(message);
mappers.put(message, messageMapper);
}
return messageMapper;
}
private MessageMapper createMessageMapper(Message message) throws LocalizedException {
return mapperFactory.createMessageMapper(message);
}
protected Map<String, Object> invoke(Client client, Operation operation, QName operationQName, Object value)
throws Exception, LocalizedException {
Input input = operation.getInput();
Output output = operation.getOutput();
MessageMapper inMessageMapper = null;
MessageMapper outMessageMapper = null;
BindingOperationInfo bindingOperationInfo = client.getEndpoint().getEndpointInfo().getBinding()
.getOperation(operationQName);
if (input != null) {
inMessageMapper = getMessageMapper(input.getMessage());
} else {
inMessageMapper = new EmptyMessageMapper();
}
if (output != null) {
outMessageMapper = getMessageMapper(output.getMessage());
} else {
outMessageMapper = new EmptyMessageMapper();
}
if (bindingOperationInfo.isUnwrappedCapable()) {
inMessageMapper.setUnwrapped(true);
outMessageMapper.setUnwrapped(true);
}
Object[] retParams;
if (value != null) {
Object[] params = inMessageMapper.convertToParams(value);
retParams = client.invoke(operationQName, params);
} else {
retParams = client.invoke(operationQName);
}
Map<String, Object> retValues = outMessageMapper.convertToValue(retParams);
return retValues;
}
public Map<String, Object> invoke(QName serviceName, QName portName, String operationName, Object params) throws Exception,
LocalizedException {
if (serviceName == null) {
throw new IllegalArgumentException("serviceName is mandatory.");
}
Service service = serviceDiscoveryHelper.getDefinition().getService(serviceName);
if (service == null) {
throw new IllegalArgumentException("Service " + serviceName.toString() + " does not exists.");
}
if (portName == null) {
throw new IllegalArgumentException("portName is mandatory.");
}
Port port = service.getPort(portName.getLocalPart());
if (port == null) {
throw new IllegalArgumentException("Port " + portName + " does not exists for service " + serviceName.toString()
+ ".");
}
if (operationName == null) {
throw new IllegalArgumentException("operationName is mandatory.");
}
Operation operation = port.getBinding().getPortType().getOperation(operationName, null, null);
if (operation == null) {
throw new IllegalArgumentException("Operation " + operationName + " does not exists for service "
+ serviceName.toString() + ".");
}
QName operationQName = new QName(port.getBinding().getPortType().getQName().getNamespaceURI(), operation.getName());
Client client = getClient(serviceName, portName);
return invoke(client, operation, operationQName, params);
}
/**
* Invoke a service with a simple map of parametes (address.city=LYON, address.zipCode=69003, etc ...) Returned
* results are also in this format
*
* @param serviceName
* @param portName
* @param operationName
* @param params
* @return
* @throws java.lang.Exception
* @throws org.talend.webservice.exception.LocalizedException
*/
public Map<String, Object> invokeSimple(QName serviceName, QName portName, String operationName, Object params)
throws Exception, LocalizedException {
if (params instanceof Map) {
params = MapConverter.mapToDeepMap((Map<String, Object>) params);
}
Map<String, Object> result = invoke(serviceName, portName, operationName, params);
return MapConverter.deepMapToMap(result);
}
protected String getClassNameForType(QName xmlSchemaTypeMapperQname) {
StringBuilder sb = new StringBuilder();
sb.append(getPackageForNamespaceURI(xmlSchemaTypeMapperQname.getNamespaceURI()));
sb.append(".");
sb.append(getClassNameForTypeName(xmlSchemaTypeMapperQname.getLocalPart()));
String className = sb.toString();
return className;
}
protected String getPackageForNamespaceURI(String ns) {
return namespacePackageMap.get(ns);
}
protected String getNamespaceURIForPackage(String packageName) {
return packageNamespaceMap.get(packageName);
}
protected String getClassNameForTypeName(String typeName) {
return toCamelCase(JAXBUtils.nameToIdentifier(typeName, IdentifierType.CLASS), true);
}
public Class<?> getClassForType(QName xmlSchemaTypeMapperQname) {
String className = getClassNameForType(xmlSchemaTypeMapperQname);
try {
Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(className);
return clazz;
} catch (ClassNotFoundException ex) {
throw new RuntimeException(ex);
}
}
public Class<?> getClassForType(QName xmlSchemaTypeMapperQName, List<String> propertiesName, int tempSuffix) {
Class<?> clazz = getClassForType(xmlSchemaTypeMapperQName);
boolean allCorrect = false;
PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(clazz);
if (propertiesName.size() == 0) {
allCorrect = true;
}
for (String propertyName : propertiesName) {
for (PropertyDescriptor descriptor : descriptors) {
if (propertyName.equalsIgnoreCase(descriptor.getName()) || (AnyPropertyMapper.LABEL.equalsIgnoreCase(propertyName) && ("any".equalsIgnoreCase(descriptor.getName()) || "content".equalsIgnoreCase(descriptor.getName())))) {
allCorrect = true;
break;
} else {
allCorrect = false;
}
}
}
if (!allCorrect) {
return getClassForType(new QName(xmlSchemaTypeMapperQName.getNamespaceURI(), xmlSchemaTypeMapperQName.getLocalPart()
+ tempSuffix), propertiesName, tempSuffix++);
} else {
return clazz;
}
}
public XmlSchemaType getTypeForClass(Class<?> clazz) {
if (clazz.isAnnotationPresent(XmlType.class)) {
XmlType type = clazz.getAnnotation(XmlType.class);
XmlSchema schema = clazz.getPackage().getAnnotation(XmlSchema.class);
QName qname = new QName(schema.namespace(), type.name());
return serviceDiscoveryHelper.getSchema().getTypeByQName(qname);
} else {
QName type = MapperFactory.javaTypeToBuiltInType(clazz.getName());
if (type != null) {
return serviceDiscoveryHelper.getSchema().getTypeByQName(type);
} else {
throw new IllegalArgumentException("Unmapped class : " + clazz.getName());
}
}
}
public ServiceDiscoveryHelper getServiceDiscoveryHelper() {
return serviceDiscoveryHelper;
}
private String toCamelCase(String value, boolean startWithLowerCase) {
String[] strings = StringUtils.split(value, "_");
for (int i = startWithLowerCase ? 1 : 0; i < strings.length; i++) {
strings[i] = StringUtils.capitalize(strings[i]);
}
return StringUtils.join(strings, "_");
}
}

View File

@@ -0,0 +1,122 @@
package org.talend.webservice.helper;
import org.apache.commons.lang.StringUtils;
import org.talend.webservice.jaxb.JAXBUtils;
public class Utils {
public final String LIST_SIZE_SYMBOL = ".size";
public final String LEFT_SQUARE_BRACKET = "[";
public final String RIGHT_SQUARE_BRACKET = "]";
public final String ALL_LIST_SYMBOL = "[*]";
public void resolveInputPath(java.util.Map<String, Object> inputMap) {
java.util.Map<String, Object> tempStoreMap = new java.util.HashMap<String, Object>();
java.util.List<String> tempRemovePath = new java.util.ArrayList<String>();
for (String key : inputMap.keySet()) {
if (key.indexOf(ALL_LIST_SYMBOL) != -1) {
String listHeadPath = key.substring(0, key.indexOf(ALL_LIST_SYMBOL));
String listFootPath = key.substring(key.indexOf(ALL_LIST_SYMBOL) + ALL_LIST_SYMBOL.length());
java.util.List listElement = (java.util.List) inputMap.get(key);
// if the list is null, ignore it but remove the
// original key
if (listElement != null) {
for (int i = 0; i < listElement.size(); i++) {
tempStoreMap.put(listHeadPath + LEFT_SQUARE_BRACKET + i + RIGHT_SQUARE_BRACKET + listFootPath,
listElement.get(i));
}
}
tempRemovePath.add(key);
}
}
inputMap.putAll(tempStoreMap);
for (String removePath : tempRemovePath) {
inputMap.remove(removePath);
}
}
public String removePunctuation(String path) {
String[] strings = PathUtil.splitPath(path, ".");
for (int i = 0; i < strings.length; i++) {
strings[i] = JAXBUtils.removePunctuation(strings[i]);
}
return StringUtils.join(strings, ".");
}
public Object getValue(java.util.Map<String, Object> map, String path) {
if (path == null || "".equals(path)) {
return null;
}
if (map == null || map.isEmpty()) {
return null;
}
java.util.List<String> paths = new java.util.ArrayList<String>();
resolvePath(map, path, paths);
if (paths.size() > 0) {
if (path.indexOf(ALL_LIST_SYMBOL) == -1) {
return map.get(paths.get(0));
} else {
int size = paths.size();
java.util.List<Object> out = new java.util.ArrayList<Object>(size);
for (int i = 0; i < size; i++) {
out.add(map.get(paths.get(i)));
}
return out;
}
} else {
return null;
}
}
public void resolvePath(java.util.Map<String, Object> map, String path, java.util.List<String> paths) {
String listHeadPath = "";
String listFootPath = "";
int size = 0;
String tempPath = "";
if (path.indexOf(ALL_LIST_SYMBOL) != -1) {
listHeadPath = path.substring(0, path.indexOf(ALL_LIST_SYMBOL));
listFootPath = path.substring(path.indexOf(ALL_LIST_SYMBOL) + ALL_LIST_SYMBOL.length());
if (map.get(listHeadPath) == null && map.get(listHeadPath + LIST_SIZE_SYMBOL) != null) {
size = Integer.parseInt(map.get(listHeadPath + LIST_SIZE_SYMBOL).toString());
for (int i = 0; i < size; i++) {
tempPath = listHeadPath + LEFT_SQUARE_BRACKET + i + RIGHT_SQUARE_BRACKET + listFootPath;
if (tempPath.indexOf(ALL_LIST_SYMBOL) != -1) {
resolvePath(map, tempPath, paths);
} else {
paths.add(tempPath);
}
}
}
} else {
paths.add(path);
}
}
public java.util.List<Object> normalize(String inputValue, String delimiter) {
if (inputValue == null || "".equals(inputValue)) {
return null;
}
Object[] inputValues = inputValue.split(delimiter);
return java.util.Arrays.asList(inputValues);
}
public String denormalize(java.util.List inputValues, String delimiter) {
if (inputValues == null || inputValues.isEmpty()) {
return null;
}
StringBuffer sb = new StringBuffer();
for (Object o : inputValues) {
sb.append(String.valueOf(o));
sb.append(delimiter);
}
if (sb.length() > 0) {
sb.delete(sb.length() - delimiter.length(), sb.length());
}
return sb.toString();
}
}

View File

@@ -0,0 +1,277 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.helper.conf;
import java.io.FileInputStream;
import java.security.KeyStore;
import javax.net.ssl.KeyManager;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.wsdl.xml.WSDLLocator;
import org.apache.cxf.configuration.jsse.TLSClientParameters;
import org.apache.cxf.configuration.security.AuthorizationPolicy;
import org.apache.cxf.configuration.security.ProxyAuthorizationPolicy;
import org.apache.cxf.transport.http.HTTPConduit;
import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
import org.apache.cxf.transports.http.configuration.ProxyServerType;
/**
*
* @author rlamarche
*/
public class ServiceHelperConfiguration {
private String proxyServer;
private int proxyPort;
private Long connectionTimeout;
private Long receiveTimeout;
private String cookie;
private String username;
private String password;
private String proxyUsername;
private String proxyPassword;
private String trustStoreFile;
private String trustStorePwd;
private String trustStoreType;
private String keyStoreFile;
private String keyStorePwd;
private String keyStoreType;
private boolean allowChunking = true;
public boolean isAllowChunking() {
return allowChunking;
}
public void setAllowChunking(boolean allowChunking) {
this.allowChunking = allowChunking;
}
public WSDLLocator createWSDLLocator(String wsdlUri) {
return new WSDLLocatorImpl(this, wsdlUri);
}
private void updateClientPolicy(HTTPClientPolicy hTTPClientPolicy) {
if (proxyServer != null) {
hTTPClientPolicy.setProxyServer(proxyServer);
hTTPClientPolicy.setProxyServerPort(proxyPort);
hTTPClientPolicy.setProxyServerType(ProxyServerType.HTTP);
} else {
hTTPClientPolicy.setProxyServer(null);
}
if (connectionTimeout != null) {
hTTPClientPolicy.setConnectionTimeout(connectionTimeout);
}
if (receiveTimeout != null) {
hTTPClientPolicy.setReceiveTimeout(receiveTimeout);
}
if (cookie != null) {
hTTPClientPolicy.setCookie(cookie);
} else {
hTTPClientPolicy.setCookie(null);
}
hTTPClientPolicy.setAllowChunking(allowChunking);
}
public void configureHttpConduit(HTTPConduit httpConduit) {
createAuthorizationPolicy(httpConduit);
createProxyAuthorizationPolicy(httpConduit);
httpConduit.setTlsClientParameters(createTLSClientParameters());
updateClientPolicy(httpConduit.getClient());
}
private void createAuthorizationPolicy(HTTPConduit httpConduit) {
if (username != null) {
AuthorizationPolicy authorizationPolicy = httpConduit.getAuthorization();
// authorizationPolicy.setAuthorizationType("Basic");
authorizationPolicy.setUserName(username);
authorizationPolicy.setPassword(password);
}
}
private void createProxyAuthorizationPolicy(HTTPConduit httpConduit) {
if (proxyUsername != null) {
ProxyAuthorizationPolicy authorizationPolicy = httpConduit.getProxyAuthorization();
// authorizationPolicy.setAuthorizationType("Basic");
authorizationPolicy.setUserName(proxyUsername);
authorizationPolicy.setPassword(proxyPassword);
}
}
private TLSClientParameters createTLSClientParameters() {
if (trustStoreFile != null || keyStoreFile != null) {
TLSClientParameters tlsCP = new TLSClientParameters();
if (trustStoreFile != null) {
try {
KeyStore trustStore = KeyStore.getInstance(trustStoreType);
trustStore.load(new FileInputStream(trustStoreFile), trustStorePwd.toCharArray());
String alg = KeyManagerFactory.getDefaultAlgorithm();
TrustManagerFactory fac = TrustManagerFactory.getInstance(alg);
fac.init(trustStore);
TrustManager[] myTrustStoreKeyManagers = fac.getTrustManagers();
tlsCP.setTrustManagers(myTrustStoreKeyManagers);
} catch (Exception ex) {
ex.printStackTrace();
}
}
if (keyStoreFile != null) {
try {
KeyStore keyStore = KeyStore.getInstance(keyStoreType);
keyStore.load(new FileInputStream(keyStoreFile), keyStorePwd.toCharArray());
String alg = KeyManagerFactory.getDefaultAlgorithm();
char[] keyPass = keyStorePwd != null ? keyStorePwd.toCharArray() : null;
KeyManagerFactory fac = KeyManagerFactory.getInstance(alg);
fac.init(keyStore, keyPass);
KeyManager[] myKeyManagers = fac.getKeyManagers();
tlsCP.setKeyManagers(myKeyManagers);
} catch (Exception ex) {
ex.printStackTrace();
}
}
tlsCP.setDisableCNCheck(true);
return tlsCP;
} else {
return null;
}
}
public Long getConnectionTimeout() {
return connectionTimeout;
}
public void setConnectionTimeout(Long connectionTimeout) {
this.connectionTimeout = connectionTimeout;
}
public String getCookie() {
return cookie;
}
public void setCookie(String cookie) {
this.cookie = cookie;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getProxyPort() {
return proxyPort;
}
public void setProxyPort(int proxyPort) {
this.proxyPort = proxyPort;
}
public String getProxyServer() {
return proxyServer;
}
public void setProxyServer(String proxyServer) {
this.proxyServer = proxyServer;
}
public Long getReceiveTimeout() {
return receiveTimeout;
}
public void setReceiveTimeout(Long receiveTimeout) {
this.receiveTimeout = receiveTimeout;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getProxyPassword() {
return proxyPassword;
}
public void setProxyPassword(String proxyPassword) {
this.proxyPassword = proxyPassword;
}
public String getProxyUsername() {
return proxyUsername;
}
public void setProxyUsername(String proxyUsername) {
this.proxyUsername = proxyUsername;
}
public String getTrustStoreFile() {
return trustStoreFile;
}
public void setTrustStoreFile(String trustStoreFile) {
this.trustStoreFile = trustStoreFile;
}
public String getTrustStorePwd() {
return trustStorePwd;
}
public void setTrustStorePwd(String trustStorePwd) {
this.trustStorePwd = trustStorePwd;
}
public String getTrustStoreType() {
return trustStoreType;
}
public void setTrustStoreType(String trustStoreType) {
this.trustStoreType = trustStoreType;
}
public String getKeyStoreFile() {
return keyStoreFile;
}
public void setKeyStoreFile(String keyStoreFile) {
this.keyStoreFile = keyStoreFile;
}
public String getKeyStorePwd() {
return keyStorePwd;
}
public void setKeyStorePwd(String keyStorePwd) {
this.keyStorePwd = keyStorePwd;
}
public String getKeyStoreType() {
return keyStoreType;
}
public void setKeyStoreType(String keyStoreType) {
this.keyStoreType = keyStoreType;
}
}

View File

@@ -0,0 +1,145 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.helper.conf;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.wsdl.xml.WSDLLocator;
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.UsernamePasswordCredentials;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.GetMethod;
import org.xml.sax.InputSource;
/**
*
* @author rlamarche
*/
public class WSDLLocatorImpl implements WSDLLocator {
private static final String HTTP_HEADER_COOKIE = "Cookie";
private String wsdlUri;
private String latestImportUri;
private ServiceHelperConfiguration configuration;
private HttpClient httpClient;
private Set<InputStream> inputStreams;
public WSDLLocatorImpl(ServiceHelperConfiguration configuration, String wsdlUri) {
this.configuration = configuration;
this.httpClient = createHttpClient();
this.wsdlUri = wsdlUri;
inputStreams = new HashSet<InputStream>();
}
public InputSource getBaseInputSource() {
GetMethod get = createGetMethod(wsdlUri);
try {
httpClient.executeMethod(get);
InputStream is = get.getResponseBodyAsStream();
inputStreams.add(is);
return new InputSource(is);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
public InputSource getImportInputSource(String parentLocation, String importLocation) {
try {
URL url = getURL(parentLocation, importLocation);
latestImportUri = url.toExternalForm();
GetMethod get = createGetMethod(latestImportUri);
httpClient.executeMethod(get);
InputStream is = get.getResponseBodyAsStream();
inputStreams.add(is);
return new InputSource(is);
} catch (MalformedURLException ex) {
throw new RuntimeException(ex);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
public static URL getURL(String parentLocation, String wsdlLocation) throws MalformedURLException {
URL contextURL = (parentLocation != null) ? getURL(null, parentLocation) : null;
try {
return new URL(contextURL, wsdlLocation);
} catch (MalformedURLException e) {
File tempFile = new File(wsdlLocation);
if (contextURL == null || (contextURL != null && tempFile.isAbsolute())) {
return tempFile.toURI().toURL();
}
// this line is reached if contextURL != null, wsdlLocation is a relative path,
// and a MalformedURLException has been thrown - so re-throw the Exception.
throw e;
}
}
public String getBaseURI() {
return wsdlUri;
}
public String getLatestImportURI() {
return latestImportUri;
}
public void close() {
for (InputStream is : inputStreams) {
try {
is.close();
} catch (IOException ex) {
Logger.getLogger(WSDLLocatorImpl.class.getName()).log(Level.WARNING, null, ex);
}
}
inputStreams.clear();
}
private GetMethod createGetMethod(String uri) {
GetMethod get = new GetMethod(uri);
if (configuration.getCookie() != null) {
get.setRequestHeader(HTTP_HEADER_COOKIE, configuration.getCookie());
}
return get;
}
private HttpClient createHttpClient() {
HttpClient httpClient = new HttpClient();
if (configuration.getProxyServer() != null) {
HostConfiguration hostConfiguration = new HostConfiguration();
hostConfiguration.setProxy(configuration.getProxyServer(), configuration.getProxyPort());
httpClient.setHostConfiguration(hostConfiguration);
}
if (configuration.getUsername() != null) {
Credentials credentials = new UsernamePasswordCredentials(configuration.getUsername(), configuration.getPassword());
httpClient.getState().setCredentials(AuthScope.ANY, credentials);
}
if (configuration.getProxyUsername() != null) {
Credentials credentials = new UsernamePasswordCredentials(configuration.getProxyUsername(),
configuration.getProxyPassword());
httpClient.getState().setProxyCredentials(AuthScope.ANY, credentials);
httpClient.getHostConfiguration().setProxy(configuration.getProxyServer(), configuration.getProxyPort());
}
return httpClient;
}
}

View File

@@ -0,0 +1,218 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.helper.map;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import org.talend.webservice.helper.PathUtil;
import org.talend.webservice.mapper.AnyTypeMapper;
/**
*
* @author rlamarche
*/
public class MapConverter {
public static final String SEPARATOR = ".";
public static final String LEFT_SQUARE_BRACKET = "[";
public static final String RIGHT_SQUARE_BRACKET = "]";
public static Map<String, Object> deepMapToMap(Map<String, Object> map) {
return deepMapToMap(map, null, SEPARATOR);
}
public static Map<String, Object> mapToDeepMap(Map<String, Object> map) {
return mapToDeepMap(map, SEPARATOR);
}
private static Map<String, Object> deepMapToMap(Object value, String k, String sep) {
if (value instanceof Map) {
Map<String, Object> map = (Map<String, Object>) value;
Map<String, Object> out = new HashMap<String, Object>();
for (Map.Entry<String, Object> entry : map.entrySet()) {
if (k == null) {
out.putAll(deepMapToMap(entry.getValue(), entry.getKey(), sep));
} else {
out.putAll(deepMapToMap(entry.getValue(), k + sep + entry.
getKey(), sep));
}
}
return out;
} else if (value instanceof List) {
List<Object> list = (List<Object>) value;
Map<String, Object> out = new HashMap<String, Object>();
int i = 0;
for (Object val : list) {
StringBuffer sb = new StringBuffer();
sb.append(k).append(LEFT_SQUARE_BRACKET).append(i).append(RIGHT_SQUARE_BRACKET);
out.putAll(deepMapToMap(val, sb.toString(), sep));
i++;
}
out.put(k + ".size", list.size());
return out;
} else {
if (k == null) {
throw new IllegalArgumentException("value must be a map or you must provide a key name");
} else {
Map<String, Object> out = new HashMap<String, Object>(1);
out.put(k, value);
return out;
}
}
}
private static Map<String, Object> mapToDeepMap(Map<String, Object> in, String sep) {
Map<String, Object> out = new HashMap<String, Object>();
Map<String, Map<String, Object>> stack = new HashMap<String, Map<String, Object>>();
Map<String, List<Object>> listStack = new HashMap<String, List<Object>>();
for (Map.Entry<String, Object> entry : in.entrySet()) {
String key = entry.getKey();
int pos = PathUtil.indexOfPath(key, sep);
if (pos == -1) {
int index = getIndexOfKey(key);
if (index == -1) {
processAnyType(out,key,entry.getValue(),null);
} else {
String listName = key.substring(0, key.indexOf(LEFT_SQUARE_BRACKET));
List<Object> list = listStack.get(listName);
if (list == null) {
list = new ArrayList<Object>();
listStack.put(listName, list);
}
if (index < list.size()) {
list.set(index, entry.getValue());
} else {
for (int i = list.size(); i < index; i++) {
list.add(null);
}
list.add(entry.getValue());
}
}
} else {
String k = key.substring(0, pos);
int index = getIndexOfKey(k);
String subK = key.substring(pos + sep.length());
if (index == -1) {
Map<String, Object> stackVal = stack.get(k);
if (stackVal == null) {
stackVal = new HashMap<String, Object>();
stack.put(k, stackVal);
}
stackVal.put(subK, entry.getValue());
} else {
String listName = k.substring(0, k.indexOf(LEFT_SQUARE_BRACKET));
List<Object> list = listStack.get(listName);
if (list == null) {
list = new ArrayList<Object>();
listStack.put(listName, list);
}
Map<String, Object> lmap = null;
if (index < list.size()) {
lmap = (Map<String, Object>) list.get(index);
if (lmap == null) {
lmap = new HashMap<String, Object>();
list.set(index, lmap);
}
} else {
for (int i = list.size(); i < index; i++) {
list.add(null);
}
list.add(new HashMap<String, Object>());
lmap = (Map<String, Object>) list.get(index);
}
lmap.put(subK, entry.getValue());
}
}
}
for (Map.Entry<String, Map<String, Object>> entry : stack.entrySet()) {
processAnyType(out,entry.getKey(),mapToDeepMap(entry.getValue(), sep),null);
}
for (Map.Entry<String, List<Object>> entry : listStack.entrySet()) {
List<Object> values = new ArrayList<Object>(entry.getValue().size());
for (Object val : entry.getValue()) {
if (val instanceof Map) {
values.add(mapToDeepMap((Map<String, Object>) val, sep));
} else {
values.add(val);
}
}
processAnyType(out,entry.getKey(),null,values);
}
return out;
}
private static void processAnyType(Map<String,Object> out,String key,Object value,List<Object> values) {
int i = key.indexOf(AnyTypeMapper.ANYTYPE_PREFIX);
String namespace = null;
String localnameOfType = null;
if(i!=-1) {
int j = key.indexOf(",");
namespace = key.substring(key.indexOf("{")+1,j);
localnameOfType = key.substring(j+1,key.indexOf("}"));
key = key.substring(0,i);
}
if(values!=null) {
if(i!=-1) {
for(int k=0;k<values.size();k++) {
Map<String,Object> anyTypeValue = new HashMap<String,Object>();
anyTypeValue.put(AnyTypeMapper.ANYTYPE_TYPE,new QName(namespace,localnameOfType));
anyTypeValue.put(AnyTypeMapper.ANYTYPE_VALUE,values.get(k));
values.set(k, anyTypeValue);
}
}
out.put(key, values);
} else {
if(i == -1) {
out.put(key, value);
} else {
Map<String,Object> anyTypeValue = new HashMap<String,Object>();
anyTypeValue.put(AnyTypeMapper.ANYTYPE_TYPE,new QName(namespace,localnameOfType));
anyTypeValue.put(AnyTypeMapper.ANYTYPE_VALUE,value);
out.put(key, anyTypeValue);
}
}
}
private static int getIndexOfKey(String key) {
int lpos = key.indexOf(LEFT_SQUARE_BRACKET);
if (lpos == -1) {
return -1;
} else {
int rpos = key.indexOf(RIGHT_SQUARE_BRACKET);
if (rpos != key.length() - 1) {
return -1;
} else {
if (rpos - lpos > 1) {
String strVal = key.substring(lpos + 1, rpos);
try {
return Integer.valueOf(strVal);
} catch (NumberFormatException e) {
return -1;
}
} else {
return -1;
}
}
}
}
}

View File

@@ -0,0 +1,142 @@
package org.talend.webservice.mapper;
import java.beans.PropertyDescriptor;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.apache.commons.beanutils.PropertyUtils;
import org.talend.webservice.exception.IllegalPropertyAccessException;
import org.talend.webservice.exception.InvocationTargetPropertyAccessor;
import org.talend.webservice.exception.LocalizedException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class AnyPropertyMapper implements PropertyMapper {
public static String LABEL = "_content_";
private MapperFactory mapperFactory;
private TypeMapper xmlBeanMapper;
private String propertyName;
private final String AnyPropertyName = "any";
private final String AnyContentPropertyName = "content";
private PropertyDescriptor propertyDescriptor;
private QName schemaTypeQName;
public AnyPropertyMapper(Class<?> clazz, MapperFactory mapperFactory) throws LocalizedException {
this.mapperFactory = mapperFactory;
PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(clazz);
for (PropertyDescriptor descriptor : descriptors) {
if (AnyPropertyName.equalsIgnoreCase(descriptor.getName())
|| AnyContentPropertyName.equalsIgnoreCase(descriptor.getName())) {
this.propertyName = descriptor.getName();
propertyDescriptor = descriptor;
break;
}
}
if (propertyDescriptor == null) {
throw new IllegalArgumentException("Unable to get propertyDescriptor for bean " + clazz.getName() + " and property "
+ propertyName);
}
}
public String getMappedPropertyName() {
return propertyName;
}
public void setValueTo(Object destination, Object value) throws LocalizedException {
try {
Method method = propertyDescriptor.getWriteMethod();
if (method.getParameterTypes()[0].equals(JAXBElement.class)) {
value = new JAXBElement(new QName(getMappedPropertyName()), getMappedClass(), value);
propertyDescriptor.getWriteMethod().invoke(destination, value);
} else {
propertyDescriptor.getWriteMethod().invoke(destination, value);
}
} catch (IllegalAccessException ex) {
throw new IllegalPropertyAccessException(propertyDescriptor.getName(), destination.getClass().getName(), ex);
} catch (InvocationTargetException ex) {
throw new InvocationTargetPropertyAccessor(propertyDescriptor.getName(), destination.getClass().getName(), ex
.getTargetException());
} catch (IllegalArgumentException ex) {
throw ex;
}
}
public Object getValueFrom(Object source) throws LocalizedException {
try {
Method method = propertyDescriptor.getReadMethod();
String value = "";
if (method.getReturnType().equals(java.util.List.class)) {
List<Element> anyList = (List<Element>) propertyDescriptor.getReadMethod().invoke(source);
for (Element child : anyList) {
Document doc = child.getOwnerDocument();
DOMSource domSource = new DOMSource(doc);
StringWriter writer = new StringWriter();
Result result = new StreamResult(writer);
Transformer transformer;
try {
TransformerFactory transFactory = TransformerFactory.newInstance();
transFactory.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
transformer = transFactory.newTransformer();
transformer.transform(domSource, result);
} catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerFactoryConfigurationError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
value += writer.getBuffer().toString();
}
return value;
} else {
// shouldn't be there.
return null;
}
} catch (IllegalAccessException ex) {
throw new IllegalPropertyAccessException(propertyDescriptor.getName(), source.getClass().getName(), ex);
} catch (InvocationTargetException ex) {
throw new InvocationTargetPropertyAccessor(propertyDescriptor.getName(), source.getClass().getName(), ex
.getTargetException());
}
}
public Class<?> getMappedClass() {
return xmlBeanMapper.getClazz();
}
public Object createProperty(Object value) throws LocalizedException {
xmlBeanMapper = mapperFactory.typeMappers.get(schemaTypeQName);
return xmlBeanMapper.convertToType(value);
}
public Object createValue(Object property) throws LocalizedException {
xmlBeanMapper = mapperFactory.typeMappers.get(schemaTypeQName);
return xmlBeanMapper.typeToValue(property);
}
}

View File

@@ -0,0 +1,104 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.ws.commons.schema.XmlSchemaType;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class AnyTypeMapper implements TypeMapper {
public static final String ANYTYPE_VALUE = "anyType";
public static final String ANYTYPE_TYPE = "anyType_type";
public static final String ANYTYPE_PREFIX = ":anyType";
private MapperFactory mapperFactory;
private Map<QName, TypeMapper> mappers = new HashMap<QName, TypeMapper>();
private TypeMapper lastTypeMapper = null;
public AnyTypeMapper(MapperFactory mapperFactory) {
this.mapperFactory = mapperFactory;
}
public Class<?> getClazz() {
if (lastTypeMapper != null) {
return lastTypeMapper.getClazz();
} else {
return Object.class;
}
}
public Object convertToType(Object value) throws LocalizedException {
if (value == null) {
return null;
}
if (!(value instanceof Map)) {
throw new LocalizedException("org.talend.ws.exception.InvalidParameterAnyType");
}
Map<String, Object> map = (Map<String, Object>) value;
value = map.get(ANYTYPE_VALUE);
if (value == null) {
throw new LocalizedException("org.talend.ws.exception.InvalidParameterAnyType");
}
Object typeValue = map.get(ANYTYPE_TYPE);
if (typeValue == null || !(typeValue instanceof QName)) {
throw new LocalizedException("org.talend.ws.exception.InvalidParameterAnyType");
}
QName type = (QName) typeValue;
lastTypeMapper = getTypeMapper(type);
if (lastTypeMapper == null) {
throw new IllegalArgumentException("Type " + type + " is invalid.");
}
return lastTypeMapper.convertToType(value);
}
public Object typeToValue(Object bean) throws LocalizedException {
if (bean == null) {
return null;
}
XmlSchemaType type = mapperFactory.getClassMapper().getTypeForClass(bean.getClass());
lastTypeMapper = getTypeMapper(type.getQName());
if (lastTypeMapper == null) {
throw new IllegalArgumentException("Class " + bean.getClass().getName() + " is not mapped.");
}
Map<String, Object> map = new HashMap<String, Object>();
map.put(ANYTYPE_TYPE, type.getQName());
map.put(ANYTYPE_VALUE, lastTypeMapper.typeToValue(bean));
return map;
}
private TypeMapper getTypeMapper(QName type) throws LocalizedException {
TypeMapper typeMapper = mappers.get(type);
if (typeMapper == null) {
XmlSchemaType xmlSchemaType = mapperFactory.getSchemaCollection().getTypeByQName(type);
if (xmlSchemaType == null) {
throw new IllegalArgumentException("Unsupported schema type : " + type);
}
typeMapper = mapperFactory.createTypeMapper(xmlSchemaType);
mappers.put(type, typeMapper);
}
return typeMapper;
}
}

View File

@@ -0,0 +1,20 @@
package org.talend.webservice.mapper;
import java.util.List;
import javax.xml.namespace.QName;
import org.apache.ws.commons.schema.XmlSchemaType;
/**
*
* @author rlamarche
*/
public interface ClassMapper {
public Class<?> getClassForType(QName xmlSchemaTypeMapperQName, List<String> propertiesName, int tempSuffix);
public Class<?> getClassForType(QName xmlSchemaTypeMapperQName);
public XmlSchemaType getTypeForClass(Class<?> clazz);
}

View File

@@ -0,0 +1,216 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class ComplexTypeMapper implements TypeMapper {
private Map<String, PropertyMapper> mappers;
private Class<?> clazz;
private List<String> propertiesOrder;
private Map<QName, ComplexTypeMapper> instanceComplexTypeMapper;
private boolean hasInstance = false;
private QName typeName = null;
private final String ABSTRACT_TYPE_NAME = "@type";
public boolean hasInstance() {
return hasInstance;
}
protected ComplexTypeMapper(Map<String, PropertyMapper> mappers, Class<?> clazz, List<String> propertiesOrder, QName typeName) {
this.mappers = mappers;
this.clazz = clazz;
this.propertiesOrder = propertiesOrder;
this.typeName = typeName;
}
public void setInstanceComplexTypeMapper(Map<QName, ComplexTypeMapper> instanceComplexTypeMapper) {
if (instanceComplexTypeMapper != null) {
this.instanceComplexTypeMapper = instanceComplexTypeMapper;
hasInstance = true;
}
}
public Class<?> getClazz() {
return clazz;
}
public Object convertToType(Object value) throws LocalizedException {
if (value == null) {
return null;
}
if (hasInstance) {
if (value instanceof Map) {
Map<String, Object> values = (Map<String, Object>) value;
if (values.containsKey(ABSTRACT_TYPE_NAME)) {
QName type = (QName) values.get(ABSTRACT_TYPE_NAME);
ComplexTypeMapper instanceComplexTypeMapper = findInstanceByQName(type);
if (instanceComplexTypeMapper != null) {
return instanceComplexTypeMapper.convertToType(values.get(instanceComplexTypeMapper.typeName
.getLocalPart()));
}
}
}
}
Object bean = null;
try {
bean = clazz.newInstance();
} catch (InstantiationException ex) {
throw new RuntimeException("Unable to instantiate bean of type " + clazz.getName(), ex);
} catch (IllegalAccessException ex) {
throw new RuntimeException("Unable to instantiate bean of type " + clazz.getName(), ex);
}
if (!(value instanceof Map)) {
if (mappers.get("value") != null && mappers.get("value") instanceof SimpleContentPropertyMapper) {
PropertyMapper propertyMapper = mappers.get("value");
if (propertyMapper != null) {
propertyMapper.setValueTo(bean, value);
} else {
// TODO log a warning ?
}
} else {
throw new IllegalArgumentException("You must provide a Map to create a complexType.");
}
} else {
Map<String, Object> values = (Map<String, Object>) value;
for (Map.Entry<String, Object> entry : values.entrySet()) {
PropertyMapper propertyMapper = mappers.get(entry.getKey());
if (propertyMapper != null) {
propertyMapper.setValueTo(bean, entry.getValue());
} else {
// TODO log a warning ?
}
}
}
return bean;
}
public ComplexTypeMapper findInstanceByQName(QName typeQName) {
ComplexTypeMapper complexTypeMapper = instanceComplexTypeMapper.get(typeQName);
if (complexTypeMapper != null) {
return complexTypeMapper;
} else {
for (ComplexTypeMapper childComplexTypeMapper : instanceComplexTypeMapper.values()) {
if (childComplexTypeMapper.hasInstance()) {
ComplexTypeMapper iComplexTypeMapper = childComplexTypeMapper.findInstanceByQName(typeQName);
if (iComplexTypeMapper != null) {
return iComplexTypeMapper;
}
}
}
}
return null;
}
public ComplexTypeMapper findInstanceByClassName(String className) {
for (ComplexTypeMapper complexTypeMapper : instanceComplexTypeMapper.values()) {
if (complexTypeMapper.getClazz().getName().equals(className)) {
return complexTypeMapper;
} else if (complexTypeMapper.hasInstance()) {
ComplexTypeMapper iComplexTypeMapper = complexTypeMapper.findInstanceByClassName(className);
if (iComplexTypeMapper != null) {
return iComplexTypeMapper;
}
}
}
return null;
}
public Object typeToValue(Object bean) throws LocalizedException {
if (bean == null) {
return null;
} else {
if (!clazz.isInstance(bean)) {
throw new IllegalArgumentException("You must provide an object of type specified by property clazz.");
}
if (hasInstance) {
String beanName = bean.getClass().getName();
if (!clazz.getName().equals(beanName)) {
ComplexTypeMapper instanceComplexTypeMapper = findInstanceByClassName(beanName);
if (instanceComplexTypeMapper != null) {
Map<String, Object> values = new HashMap<String, Object>();
values.put(ABSTRACT_TYPE_NAME, instanceComplexTypeMapper.typeName);
values.put(instanceComplexTypeMapper.typeName.getLocalPart(), instanceComplexTypeMapper.typeToValue(bean));
return values;
}
}
}
if (mappers.get("value") != null && mappers.get("value") instanceof SimpleContentPropertyMapper) {
PropertyMapper propertyMapper = mappers.get("value");
if (propertyMapper != null) {
return propertyMapper.getValueFrom(bean);
} else {
return null;
}
} else {
Map<String, Object> values = new HashMap<String, Object>(mappers.size());
for (Map.Entry<String, PropertyMapper> entry : mappers.entrySet()) {
Object value = entry.getValue().getValueFrom(bean);
if (value != null) {
values.put(entry.getKey(), value);
}
}
return values;
}
}
}
public Object[] convertToTypeUnwrapped(Map<String, Object> values) throws LocalizedException {
Object[] objects = new Object[propertiesOrder.size()];
int i = 0;
for (String property : propertiesOrder) {
Object value = values.get(property);
if (value != null) {
PropertyMapper propertyMapper = mappers.get(property);
objects[i] = propertyMapper.createProperty(value);
}
i++;
}
return objects;
}
public Map<String, Object> typeToValueUnwrapped(Object[] params) throws LocalizedException {
if (params == null) {
return null;
}
Map<String, Object> values = new HashMap<String, Object>(mappers.size());
int i = 0;
for (Object param : params) {
if (i >= propertiesOrder.size()) {
throw new IllegalArgumentException("Too much params.");
}
String property = propertiesOrder.get(i);
PropertyMapper propertyMapper = mappers.get(property);
values.put(property, propertyMapper.createValue(param));
i++;
}
return values;
}
}

View File

@@ -0,0 +1,38 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.util.Map;
import javax.wsdl.Message;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class EmptyMessageMapper implements MessageMapper {
public Message getMessage() {
return null;
}
public Object[] convertToParams(Object value) throws LocalizedException {
return null;
}
public Map<String, Object> convertToValue(Object[] params) throws LocalizedException {
return null;
}
public boolean isUnwrapped() {
return false;
}
public void setUnwrapped(boolean unwrapped) {
}
}

View File

@@ -0,0 +1,79 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.apache.commons.beanutils.ConvertUtils;
import org.talend.webservice.exception.InvalidEnumValueException;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class EnumTypeMapper implements TypeMapper {
private Class<?> clazz;
private Method value;
private Method fromValue;
public EnumTypeMapper(Class<?> clazz) {
if (!clazz.isEnum()) {
throw new IllegalArgumentException("You must provide an enum class.");
}
this.clazz = clazz;
try {
this.fromValue = clazz.getMethod("fromValue", String.class);
this.value = clazz.getMethod("value");
} catch (NoSuchMethodException ex) {
throw new RuntimeException(ex);
} catch (SecurityException ex) {
throw new RuntimeException(ex);
}
}
public Class<?> getClazz() {
return clazz;
}
public Object convertToType(Object value) throws LocalizedException {
if (value == null) {
return null;
}
if (!clazz.isInstance(value)) {
String str = ConvertUtils.convert(value);
try {
return fromValue.invoke(null, str);// bug 13000
// return valueOf.invoke(null, str);
} catch (IllegalAccessException ex) {
throw new LocalizedException("org.talend.ws.exception.illegalAccessValueOf", new String[] { clazz.getName() }, ex);
} catch (InvocationTargetException ex) {
if (ex.getTargetException() instanceof IllegalArgumentException) {
throw new InvalidEnumValueException(str, clazz.getName());
} else {
throw new LocalizedException("org.talend.ws.exception.Unknown", ex.getTargetException());
}
}
} else {
return value;
}
}
public Object typeToValue(Object bean) throws LocalizedException {
if (bean == null) {
return null;
} else {
try {
return value.invoke(bean); // bug 13000
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
}
}

View File

@@ -0,0 +1,153 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.commons.beanutils.PropertyUtils;
import org.talend.webservice.exception.IllegalPropertyAccessException;
import org.talend.webservice.exception.InvocationTargetPropertyAccessor;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class ListPropertyMapper implements PropertyMapper {
private Map<QName, TypeMapper> schemaTypeMap;
private TypeMapper xmlBeanMapper;
private String propertyName;
private PropertyDescriptor propertyDescriptor;
private QName schemaTypeQName;
public ListPropertyMapper(Class<?> clazz, QName typeQName, String propertyName, Map<QName, TypeMapper> schemaTypeMap) {
this.schemaTypeMap = schemaTypeMap;
this.schemaTypeQName = typeQName;
PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(clazz);
for (PropertyDescriptor descriptor : descriptors) {
if (propertyName.equalsIgnoreCase(descriptor.getName())) {
this.propertyName = descriptor.getName();
propertyDescriptor = descriptor;
break;
}
}
if (propertyDescriptor == null) {
throw new IllegalArgumentException("Unable to get propertyDescriptor for bean " + typeQName + " and property "
+ propertyName);
}
}
public Class<?> getMappedClass() {
return xmlBeanMapper.getClazz();
}
public String getMappedPropertyName() {
return propertyName;
}
public void setValueTo(Object destination, Object value) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
if (value == null) {
return;
}
List values;
if (value instanceof List) {
values = (List) value;
} else {
values = Arrays.asList(value);
}
List target;
try {
target = (List) propertyDescriptor.getReadMethod().invoke(destination);
} catch (IllegalAccessException ex) {
throw new IllegalPropertyAccessException(propertyDescriptor.getName(), destination.getClass().getName(), ex);
} catch (InvocationTargetException ex) {
throw new InvocationTargetPropertyAccessor(propertyDescriptor.getName(), destination.getClass().getName(), ex);
}
for (Object val : values) {
target.add(xmlBeanMapper.convertToType(val));
}
}
public Object getValueFrom(Object source) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
List values;
try {
values = (List) propertyDescriptor.getReadMethod().invoke(source);
} catch (IllegalAccessException ex) {
throw new IllegalPropertyAccessException(propertyDescriptor.getName(), source.getClass().getName(), ex);
} catch (InvocationTargetException ex) {
throw new InvocationTargetPropertyAccessor(propertyDescriptor.getName(), source.getClass().getName(), ex);
}
List newValues = new ArrayList(values.size());
for (Object value : values) {
newValues.add(xmlBeanMapper.typeToValue(value));
}
return newValues;
}
public Object createProperty(Object value) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
if (value == null) {
return null;
}
List values;
if (value instanceof List) {
values = (List) value;
} else {
values = Arrays.asList(value);
}
List property = new ArrayList(values.size());
for (Object val : values) {
property.add(xmlBeanMapper.convertToType(val));
}
return property;
}
public Object createValue(Object property) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
if (property == null) {
return null;
}
if (!(property instanceof List)) {
if (!(property instanceof Object[])) {// treat Object[] as List ,bug for 9900 (wrap webservice)
throw new IllegalArgumentException("You must provide a list of properties");
}// end
}
List<Object> properties = null;
if (property instanceof Object[]) {// treat Object[] as List ,bug for 9900 (wrap webservice)
Object[] os = (Object[]) property;
properties = Arrays.asList(os);
} else {// end
properties = (List<Object>) property;
}
List<Object> values = new ArrayList<Object>(properties.size());
for (Object prop : properties) {
values.add(xmlBeanMapper.typeToValue(prop));
}
return values;
}
}

View File

@@ -0,0 +1,567 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.wsdl.Message;
import javax.wsdl.Part;
import javax.xml.namespace.QName;
import org.apache.commons.collections.map.ListOrderedMap;
import org.apache.ws.commons.schema.XmlSchema;
import org.apache.ws.commons.schema.XmlSchemaAll;
import org.apache.ws.commons.schema.XmlSchemaAny;
import org.apache.ws.commons.schema.XmlSchemaChoice;
import org.apache.ws.commons.schema.XmlSchemaCollection;
import org.apache.ws.commons.schema.XmlSchemaComplexContent;
import org.apache.ws.commons.schema.XmlSchemaComplexContentExtension;
import org.apache.ws.commons.schema.XmlSchemaComplexContentRestriction;
import org.apache.ws.commons.schema.XmlSchemaComplexType;
import org.apache.ws.commons.schema.XmlSchemaContent;
import org.apache.ws.commons.schema.XmlSchemaContentModel;
import org.apache.ws.commons.schema.XmlSchemaElement;
import org.apache.ws.commons.schema.XmlSchemaEnumerationFacet;
import org.apache.ws.commons.schema.XmlSchemaFacet;
import org.apache.ws.commons.schema.XmlSchemaGroupParticle;
import org.apache.ws.commons.schema.XmlSchemaGroupRef;
import org.apache.ws.commons.schema.XmlSchemaObject;
import org.apache.ws.commons.schema.XmlSchemaParticle;
import org.apache.ws.commons.schema.XmlSchemaSequence;
import org.apache.ws.commons.schema.XmlSchemaSequenceMember;
import org.apache.ws.commons.schema.XmlSchemaSimpleContent;
import org.apache.ws.commons.schema.XmlSchemaSimpleContentExtension;
import org.apache.ws.commons.schema.XmlSchemaSimpleContentRestriction;
import org.apache.ws.commons.schema.XmlSchemaSimpleType;
import org.apache.ws.commons.schema.XmlSchemaSimpleTypeContent;
import org.apache.ws.commons.schema.XmlSchemaSimpleTypeList;
import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
import org.apache.ws.commons.schema.XmlSchemaSimpleTypeUnion;
import org.apache.ws.commons.schema.XmlSchemaType;
import org.apache.ws.commons.schema.utils.XmlSchemaObjectBase;
import org.talend.webservice.exception.LocalizedException;
import org.talend.webservice.jaxb.JAXBUtils;
/**
*
* @author rlamarche
*/
public class MapperFactory {
private static final Map<String, String> BUILTIN_DATATYPES_MAP;
private static final Map<String, String> BUILTIN_DATATYPES_MAP_REVERSE;
private static final String W3C_XML_SCHEMA_URI = "http://www.w3.org/2001/XMLSchema";
private static final String W3C_XML_SCHEMA_DATETYPES_URI = "http://www.w3.org/2001/XMLSchema-datatypes";
private static final QName ANYTYPE_QNAME = new QName(W3C_XML_SCHEMA_URI, "anyType");
private static String byteArrayName = new byte[0].getClass().getName();
// refer to :http://www.w3.org/TR/xmlschema-2/
static {
BUILTIN_DATATYPES_MAP = new HashMap<String, String>();
BUILTIN_DATATYPES_MAP.put("string", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("integer", "java.math.BigInteger");
BUILTIN_DATATYPES_MAP.put("int", "java.lang.Integer");
BUILTIN_DATATYPES_MAP.put("long", "java.lang.Long");
BUILTIN_DATATYPES_MAP.put("short", "java.lang.Short");
BUILTIN_DATATYPES_MAP.put("decimal", "java.math.BigDecimal");
BUILTIN_DATATYPES_MAP.put("float", "java.lang.Float");
BUILTIN_DATATYPES_MAP.put("double", "java.lang.Double");
BUILTIN_DATATYPES_MAP.put("boolean", "java.lang.Boolean");
BUILTIN_DATATYPES_MAP.put("byte", "java.lang.Byte");
BUILTIN_DATATYPES_MAP.put("QName", "javax.xml.namespace.QName");
BUILTIN_DATATYPES_MAP.put("dateTime", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("base64Binary", byteArrayName);
BUILTIN_DATATYPES_MAP.put("hexBinary", byteArrayName);
BUILTIN_DATATYPES_MAP.put("unsignedInt", "java.lang.Long");
BUILTIN_DATATYPES_MAP.put("unsignedShort", "java.lang.Integer");
BUILTIN_DATATYPES_MAP.put("unsignedByte", "java.lang.Short");
BUILTIN_DATATYPES_MAP.put("time", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("date", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("gYear", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("gYearMonth", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("gMonth", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("gMonthDay", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("gDay", "javax.xml.datatype.XMLGregorianCalendar");
BUILTIN_DATATYPES_MAP.put("duration", "javax.xml.datatype.Duration");
BUILTIN_DATATYPES_MAP.put("NOTATION", "javax.xml.namespace.QName");
BUILTIN_DATATYPES_MAP.put("anyURI", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("token", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("IDREF", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("NCName", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("ENTITY", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("normalizedString", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("language", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("Name", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("NMTOKEN", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("NMTOKENS", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("ID", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("IDREFS", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("ENTITIES", "java.lang.String");
BUILTIN_DATATYPES_MAP.put("nonPositiveInteger", "java.math.BigInteger");
BUILTIN_DATATYPES_MAP.put("nonNegativeInteger", "java.math.BigInteger");
BUILTIN_DATATYPES_MAP.put("negativeInteger", "java.math.BigInteger");
BUILTIN_DATATYPES_MAP.put("positiveInteger", "java.math.BigInteger");
BUILTIN_DATATYPES_MAP.put("unsignedLong", "java.math.BigInteger");
BUILTIN_DATATYPES_MAP_REVERSE = new HashMap<String, String>();
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.String", "string");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.math.BigInteger", "integer");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Integer", "int");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Long", "long");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Short", "short");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.math.BigDecimal", "decimal");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Float", "float");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Double", "double");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Boolean", "boolean");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Byte", "byte");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.namespace.QName", "QName");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "dateTime");
BUILTIN_DATATYPES_MAP_REVERSE.put(byteArrayName, "base64Binary");
BUILTIN_DATATYPES_MAP_REVERSE.put(byteArrayName, "hexBinary");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Long", "unsignedInt");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Short", "unsignedShort");
BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.Byte", "unsignedByte");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "time");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "date");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "gYear");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "gYearMonth");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "gMonth");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "gMonthDay");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.XMLGregorianCalendar", "gDay");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.datatype.Duration", "duration");
BUILTIN_DATATYPES_MAP_REVERSE.put("javax.xml.namespace.QName", "NOTATION");
// BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.String", "anyURI"); // bug13001
// BUILTIN_DATATYPES_MAP_REVERSE.put("java.lang.String", "token"); // bug13001
}
protected ClassMapper classMapper;
protected XmlSchemaCollection schemaCollection;
// bug 13001 nested call type
protected Map<QName, TypeMapper> typeMappers;
public MapperFactory(ClassMapper classMapper, XmlSchemaCollection schemaCollection) {
this.classMapper = classMapper;
this.schemaCollection = schemaCollection;
this.typeMappers = new HashMap<QName, TypeMapper>();
}
public XmlSchemaCollection getSchemaCollection() {
return schemaCollection;
}
public ClassMapper getClassMapper() {
return classMapper;
}
/**
* Return the message mapper or null if the message does not have any parts or is null
*
* @param message
* @return
*/
public MessageMapper createMessageMapper(Message message) throws LocalizedException {
if (message == null) {
return new EmptyMessageMapper();
}
Map<String, Part> parts = message.getParts();
if (parts == null || parts != null && parts.size() == 0) {
return new EmptyMessageMapper();
} else {
Map<String, TypeMapper> mappers = new HashMap<String, TypeMapper>(parts.size());
for (Map.Entry<String, Part> entry : parts.entrySet()) {
String name = entry.getKey();
Part part = entry.getValue();
XmlSchemaType xmlSchemaType = null;
QName elementName = part.getElementName();
if (elementName == null) {
QName typeName = part.getTypeName();
if (typeName == null) {
throw new IllegalArgumentException("Unable to find type of part " + part.getName() + " for message "
+ message.getQName());
}
xmlSchemaType = schemaCollection.getTypeByQName(typeName);
if (xmlSchemaType.getName() == null) {
xmlSchemaType.setName(typeName.getLocalPart());
}
} else {
XmlSchemaElement xmlSchemaElement = schemaCollection.getElementByQName(part.getElementName());
xmlSchemaType = xmlSchemaElement.getSchemaType();
if (xmlSchemaType.getName() == null) {
xmlSchemaType.setName(xmlSchemaElement.getName());
}
}
if (xmlSchemaType == null) {
throw new IllegalArgumentException("Type " + part.getElementName() + " was not found in the schema.");
}
mappers.put(name, createTypeMapper(xmlSchemaType));
}
return new MessageMapperImpl(mappers, message);
}
}
protected TypeMapper createTypeMapper(XmlSchemaType xmlSchemaType) throws LocalizedException {
if (!typeMappers.containsKey(xmlSchemaType.getQName())) {
typeMappers.put(xmlSchemaType.getQName(), null);
TypeMapper typeMapper = null;
if (xmlSchemaType instanceof XmlSchemaComplexType) {
typeMapper = createComplexTypeMapper((XmlSchemaComplexType) xmlSchemaType);
} else if (xmlSchemaType instanceof XmlSchemaSimpleType) {
if (ANYTYPE_QNAME.equals(xmlSchemaType.getQName())) {
typeMapper = new AnyTypeMapper(this);
} else {
typeMapper = createSimpleTypeMapper((XmlSchemaSimpleType) xmlSchemaType);
}
} else {
throw new IllegalArgumentException("Type " + xmlSchemaType.getClass().getName() + " is not yes supported.");
}
typeMappers.put(xmlSchemaType.getQName(), typeMapper);
return typeMapper;
} else {
return typeMappers.get(xmlSchemaType.getQName());
}
}
private TypeMapper createSimpleTypeMapper(XmlSchemaSimpleType xmlSchemaSimpleType) {
XmlSchemaSimpleTypeContent xmlSchemaSimpleTypeContent = xmlSchemaSimpleType.getContent();
QName qname = xmlSchemaSimpleType.getQName();
String namespaceuri = qname == null ? null : qname.getNamespaceURI();
// simple type
String simpleClassName = builtInTypeToJavaType(xmlSchemaSimpleType.getName());
if (simpleClassName != null && (W3C_XML_SCHEMA_URI.equals(namespaceuri) || W3C_XML_SCHEMA_DATETYPES_URI.equals(namespaceuri))) {
Class<?> clazz;
try {
clazz = Class.forName(simpleClassName);
} catch (ClassNotFoundException ex) {
throw new IllegalArgumentException("Unable to find java type " + simpleClassName, ex);
}
return new SimpleTypeMapper(clazz);
} else if (xmlSchemaSimpleTypeContent instanceof XmlSchemaSimpleTypeList) {
// using java.util.list to map xmlschemasimpletypelist
// bug 13922
Class<?> clazz;
try {
clazz = Class.forName("java.util.List");
} catch (ClassNotFoundException ex) {
throw new IllegalArgumentException("Unable to find java type java.util.List", ex);
}
return new SimpleTypeMapper(clazz);
} else if (xmlSchemaSimpleTypeContent instanceof XmlSchemaSimpleTypeRestriction) {
// Enum or others
// bug 13001 for
// <xsd:simpleType name="EventType">
// <xsd:restriction base="xsd:string"/>
// </xsd:simpleType>
// and not enum
// and enum have not typename,means jaxb didn't gen class for the enum without simpleType.getName
XmlSchemaSimpleTypeRestriction xmlSchemaSimpleTypeRestriction = (XmlSchemaSimpleTypeRestriction) xmlSchemaSimpleTypeContent;
List<XmlSchemaFacet> facets = xmlSchemaSimpleTypeRestriction.getFacets();
if (facets.size() > 0 && facets.get(0) instanceof XmlSchemaEnumerationFacet && xmlSchemaSimpleType.getName() != null) {
Class<?> clazz = classMapper.getClassForType(xmlSchemaSimpleType.getQName());
if (!clazz.isEnum()) {
throw new IllegalArgumentException("Class " + clazz.getName() + " should be an enum.");
}
return new EnumTypeMapper(clazz);
} else {
String className = builtInTypeToJavaType(((XmlSchemaSimpleTypeRestriction) xmlSchemaSimpleTypeContent)
.getBaseTypeName().getLocalPart());
if (className == null) {
throw new IllegalArgumentException("Unsupported type " + xmlSchemaSimpleType.getQName());
}
Class<?> clazz;
try {
clazz = Class.forName(className);
} catch (ClassNotFoundException ex) {
throw new IllegalArgumentException("Unable to find java type " + className, ex);
}
return new SimpleTypeMapper(clazz);
}
} else if (xmlSchemaSimpleTypeContent instanceof XmlSchemaSimpleTypeUnion) {
Class<?> clazz;
try {
clazz = Class.forName("java.lang.String");
} catch (ClassNotFoundException ex) {
throw new IllegalArgumentException("Unable to find java type java.lang.String", ex);
}
return new SimpleTypeMapper(clazz);
} else {
throw new IllegalArgumentException("Unsupported type " + xmlSchemaSimpleTypeContent.getClass().getName());
}
}
private ComplexTypeMapper createComplexTypeMapper(XmlSchemaComplexType xmlSchemaComplexType) throws LocalizedException {
// 0. if that class is abstract, find the instance class
Map<QName, ComplexTypeMapper> instanceComplexTypeMapper = null;
if (xmlSchemaComplexType.isAbstract()) {
instanceComplexTypeMapper = findInstance(xmlSchemaComplexType.getQName());
}
// 1. get the all properties from complexType
Map<String, Object> properties = getProperties(xmlSchemaComplexType);
Map<String, Object> tempProperties = new ListOrderedMap();
for (String key : properties.keySet()) {
tempProperties.put(JAXBUtils.removePunctuation(key), properties.get(key));
}
properties.clear();
properties.putAll(tempProperties);
// 2. get class with typeMapperQname(type Qname, element Qname, inner class Qname)
// and use properties to check the class name(class,class1,class2)
ListOrderedMap orderedMap = (ListOrderedMap) properties;
Class<?> clazz = classMapper.getClassForType(xmlSchemaComplexType.getQName(), orderedMap.keyList(), 1);
// 3.create propertyMapper (propertyName,class,schemaTypeMap,typeMapperQname)
Map<String, PropertyMapper> mappers = new HashMap<String, PropertyMapper>();
for (String key : properties.keySet()) {
Object xmlSchemaObject = properties.get(key);
if (xmlSchemaObject == null) {
if (AnyPropertyMapper.LABEL.equals(key)) {
mappers.put(key, new AnyPropertyMapper(clazz, this));
}
} else if (xmlSchemaObject instanceof XmlSchemaElement) {
mappers.put(key, createPropertyMapper((XmlSchemaElement) xmlSchemaObject, clazz, key));
} else if (xmlSchemaObject instanceof XmlSchemaType) {
mappers.put(key, createPropertyMapper((XmlSchemaType) xmlSchemaObject, clazz, key));
}
}
// 4.create new ComplexTypeMapper
ComplexTypeMapper complexTypeMapper = new ComplexTypeMapper(mappers, clazz, orderedMap.keyList(),
xmlSchemaComplexType.getQName());
if (instanceComplexTypeMapper != null && !instanceComplexTypeMapper.isEmpty()) {
complexTypeMapper.setInstanceComplexTypeMapper(instanceComplexTypeMapper);
}
return complexTypeMapper;
}
/**
* DOC bchen Comment method "findInstance".
*
* @param qName
* @throws LocalizedException
*/
private Map<QName, ComplexTypeMapper> findInstance(QName abstractQName) throws LocalizedException {
Map<QName, ComplexTypeMapper> instanceTypeMappers = new HashMap<QName, ComplexTypeMapper>();
XmlSchema[] xmlSchemas = schemaCollection.getXmlSchemas();
for (XmlSchema xmlSchema : xmlSchemas) {
Map<QName, XmlSchemaType> xmlSchemaTypes = xmlSchema.getSchemaTypes();
for (QName key : xmlSchemaTypes.keySet()) {
XmlSchemaType xmlSchemaType = xmlSchemaTypes.get(key);
if (xmlSchemaType instanceof XmlSchemaComplexType) {
XmlSchemaContentModel xmlSchemaContentModel = ((XmlSchemaComplexType) xmlSchemaType).getContentModel();
XmlSchemaComplexContent xmlSchemaComplexContent = (XmlSchemaComplexContent) xmlSchemaContentModel;
if (xmlSchemaContentModel instanceof XmlSchemaComplexContent) {
XmlSchemaContent xmlSchemaContent = xmlSchemaComplexContent.getContent();
if (xmlSchemaContent instanceof XmlSchemaComplexContentExtension) {
XmlSchemaComplexContentExtension xmlSchemaComplexContentExtension = (XmlSchemaComplexContentExtension) xmlSchemaContent;
if (xmlSchemaComplexContentExtension.getBaseTypeName().equals(abstractQName)) {
instanceTypeMappers.put(xmlSchemaType.getQName(),
(ComplexTypeMapper) createTypeMapper(xmlSchemaType));
}
}
}
}
}
}
return instanceTypeMappers;
}
protected PropertyMapper createPropertyMapper(XmlSchemaType xmlSchemaType, Class<?> clazz, String propertyName)
throws LocalizedException {
if (propertyName == null || "".equals(propertyName)) {
propertyName = xmlSchemaType.getName();
}
createTypeMapper(xmlSchemaType);
return new SimpleContentPropertyMapper(clazz, xmlSchemaType.getQName(), propertyName, typeMappers);
}
protected PropertyMapper createPropertyMapper(XmlSchemaElement xmlSchemaElement, Class<?> clazz, String propertyName)
throws LocalizedException {
XmlSchemaType xmlSchemaType = xmlSchemaElement.getSchemaType();
// bug 13001
if (xmlSchemaType == null && xmlSchemaElement.getRef() != null && xmlSchemaElement.getRef().getTarget() != null) {
xmlSchemaElement = schemaCollection.getElementByQName(xmlSchemaElement.getRef().getTargetQName());
xmlSchemaType = xmlSchemaElement.getSchemaType();
}
// bug 13001, inner class
if (xmlSchemaType.getName() == null) {
if (xmlSchemaType instanceof XmlSchemaComplexType) {
String innerClassName = clazz.getName().substring(clazz.getName().lastIndexOf(".") + 1);
innerClassName += "$";
// innerClassName += xmlSchemaElement.getName(); inner Class name
// should be capital first
innerClassName += xmlSchemaElement.getName().substring(0, 1).toUpperCase()
+ xmlSchemaElement.getName().substring(1);
xmlSchemaType.setName(innerClassName);
} else {
// The name is required if the simpleType element is a child of the
// schema element, otherwise it is not allowed
xmlSchemaType.setName(xmlSchemaElement.getName());
}
}
createTypeMapper(xmlSchemaType);
if (xmlSchemaElement.getMaxOccurs() > 1) {
return new ListPropertyMapper(clazz, xmlSchemaType.getQName(), propertyName, typeMappers);
} else {
return new SimplePropertyMapper(clazz, xmlSchemaType.getQName(), propertyName, typeMappers);
}
}
private Map<String, Object> getProperties(XmlSchemaComplexType xmlSchemaComplexType) throws LocalizedException {
Map<String, Object> mappers = new ListOrderedMap();
XmlSchemaContentModel xmlSchemaContentModel = xmlSchemaComplexType.getContentModel();
if (xmlSchemaContentModel == null) {
XmlSchemaParticle xmlSchemaParticle = xmlSchemaComplexType.getParticle();
if (xmlSchemaParticle instanceof XmlSchemaGroupParticle) {
XmlSchemaGroupParticle xmlSchemaGroupParticle = (XmlSchemaGroupParticle) xmlSchemaParticle;
mappers.putAll(getProperties(xmlSchemaGroupParticle));
} else if (xmlSchemaParticle instanceof XmlSchemaGroupRef) {
XmlSchemaGroupRef xmlSchemaGroupRef = (XmlSchemaGroupRef) xmlSchemaParticle;
XmlSchemaGroupParticle xmlSchemaGroupRefParticle = xmlSchemaGroupRef.getParticle();
mappers.putAll(getProperties(xmlSchemaGroupRefParticle));
} else {
// if(!xmlSchemaComplexType.isAbstract())
// throw new IllegalArgumentException("unknown Content of XmlSchemaComplexType:" +
// xmlSchemaComplexType.getQName());
}
} else if (xmlSchemaContentModel instanceof XmlSchemaComplexContent) {
XmlSchemaComplexContent xmlSchemaComplexContent = (XmlSchemaComplexContent) xmlSchemaContentModel;
XmlSchemaContent xmlSchemaContent = xmlSchemaComplexContent.getContent();
if (xmlSchemaContent instanceof XmlSchemaComplexContentExtension) {
XmlSchemaComplexContentExtension xmlSchemaComplexContentExtension = (XmlSchemaComplexContentExtension) xmlSchemaContent;
XmlSchemaComplexType baseXmlSchemaComplexType = (XmlSchemaComplexType) schemaCollection
.getTypeByQName(xmlSchemaComplexContentExtension.getBaseTypeName());
// First, recursion on parent class (for properties order)
mappers.putAll(getProperties(baseXmlSchemaComplexType));
XmlSchemaParticle xmlSchemaParticle = xmlSchemaComplexContentExtension.getParticle();
if (xmlSchemaParticle instanceof XmlSchemaGroupParticle) {
mappers.putAll(getProperties((XmlSchemaGroupParticle) xmlSchemaParticle));
}
} else if (xmlSchemaContent instanceof XmlSchemaComplexContentRestriction) {
// TODO
throw new IllegalArgumentException("XmlSchemaComplexContentRestriction is not yet supported.");
} else {
throw new IllegalArgumentException("Invalid XmlSchemaContent for a XmlSchemaComplexContent.");
}
} else if (xmlSchemaContentModel instanceof XmlSchemaSimpleContent) {
XmlSchemaSimpleContent xmlSchemaSimpleContent = (XmlSchemaSimpleContent) xmlSchemaContentModel;
XmlSchemaContent xmlSchemaContent = xmlSchemaSimpleContent.getContent();
if (xmlSchemaContent instanceof XmlSchemaSimpleContentExtension) {
XmlSchemaSimpleContentExtension xmlSchemaSimpleContentExtension = (XmlSchemaSimpleContentExtension) xmlSchemaContent;
XmlSchemaType baseXmlSchemaType = schemaCollection.getTypeByQName(xmlSchemaSimpleContentExtension
.getBaseTypeName());
if (baseXmlSchemaType instanceof XmlSchemaSimpleType) {
mappers.put("value", baseXmlSchemaType);
} else if (baseXmlSchemaType instanceof XmlSchemaComplexType) {
throw new IllegalArgumentException(
"A complex type with a simple content or a simple type is expected but found:"
+ baseXmlSchemaType.getQName());
}
} else if (xmlSchemaContent instanceof XmlSchemaSimpleContentRestriction) {
XmlSchemaSimpleContentRestriction xmlSchemaSimpleContentRestriction = (XmlSchemaSimpleContentRestriction) xmlSchemaContent;
// TODO
throw new IllegalArgumentException("XmlSchemaSimpleContentRestriction is not yet supported.");
} else {
throw new IllegalArgumentException("Invalid XmlSchemaContent for a XmlSchemaComplexContent.");
}
} else {
throw new IllegalArgumentException("unknown XmlSchemaContentModel.");
}
return mappers;
}
private Map<String, XmlSchemaElement> getProperties(XmlSchemaGroupParticle xmlSchemaGroupParticle) throws LocalizedException {
Map<String, XmlSchemaElement> mappers = new ListOrderedMap();
if (xmlSchemaGroupParticle instanceof XmlSchemaSequence) {
XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence) xmlSchemaGroupParticle;
List<XmlSchemaSequenceMember> sequences = xmlSchemaSequence.getItems();
for (XmlSchemaSequenceMember sequence : sequences) {
mappers.putAll(getProperties(sequence));
}
} else if (xmlSchemaGroupParticle instanceof XmlSchemaAll) {
XmlSchemaAll xmlSchemaAll = (XmlSchemaAll) xmlSchemaGroupParticle;
List<XmlSchemaElement> elements = xmlSchemaAll.getItems();
for (XmlSchemaElement element : elements) {
mappers.put(element.getName(), element);
}
} else if (xmlSchemaGroupParticle instanceof XmlSchemaChoice) {
XmlSchemaChoice xmlSchemaChoice = (XmlSchemaChoice) xmlSchemaGroupParticle;
List<XmlSchemaObject> xmlSchemaObjects = xmlSchemaChoice.getItems();
for (XmlSchemaObject xmlSchemaObject : xmlSchemaObjects) {
mappers.putAll(getProperties(xmlSchemaObject));
}
}
return mappers;
}
private Map<String, XmlSchemaElement> getProperties(XmlSchemaObjectBase xmlSchemaObjectBase) throws LocalizedException {
Map<String, XmlSchemaElement> mappers = new ListOrderedMap();
if (xmlSchemaObjectBase instanceof XmlSchemaElement) {
XmlSchemaElement xmlSchemaElement = (XmlSchemaElement) xmlSchemaObjectBase;
if (xmlSchemaElement.getName() == null) {
if (xmlSchemaElement.getRefBase() != null && xmlSchemaElement.getRefBase().getTargetQName() != null) {
mappers.put(xmlSchemaElement.getRefBase().getTargetQName().getLocalPart(), xmlSchemaElement);
} else {
throw new IllegalArgumentException("An Element don't defined name.");
}
} else {
mappers.put(xmlSchemaElement.getName(), xmlSchemaElement);
}
} else if (xmlSchemaObjectBase instanceof XmlSchemaAny) { // bug 14053
mappers.put(AnyPropertyMapper.LABEL, null);
} else if (xmlSchemaObjectBase instanceof XmlSchemaChoice) {
mappers.putAll(getProperties((XmlSchemaChoice) xmlSchemaObjectBase));
} else if (xmlSchemaObjectBase instanceof XmlSchemaGroupRef) {
XmlSchemaGroupRef xmlSchemaGroupRef = (XmlSchemaGroupRef) xmlSchemaObjectBase;
XmlSchemaGroupParticle xmlSchemaGroupRefParticle = xmlSchemaGroupRef.getParticle();
mappers.putAll(getProperties(xmlSchemaGroupRefParticle));
} else if (xmlSchemaObjectBase instanceof XmlSchemaSequence) {
mappers.putAll(getProperties((XmlSchemaSequence) xmlSchemaObjectBase));
} else {
throw new IllegalArgumentException("Invalid xmlSchemaObject.");
}
return mappers;
}
private static String builtInTypeToJavaType(String type) {
return BUILTIN_DATATYPES_MAP.get(type);
}
public static QName javaTypeToBuiltInType(String type) {
return new QName(W3C_XML_SCHEMA_URI, BUILTIN_DATATYPES_MAP_REVERSE.get(type));
}
}

View File

@@ -0,0 +1,40 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.util.Map;
import javax.wsdl.Message;
import org.talend.webservice.exception.LocalizedException;
/**
* Define the transformation between params and Message parts
* @author rlamarche
*/
public interface MessageMapper {
/**
* @return the targeted message
*/
public Message getMessage();
/**
* Convert value to parts
* @param value
* @return
*/
public Object[] convertToParams(Object value) throws LocalizedException;
;
/**
* Convert parts to value
* @param params
* @return
*/
public Map<String, Object> convertToValue(Object[] params) throws LocalizedException;
public boolean isUnwrapped();
public void setUnwrapped(boolean unwrapped);
}

View File

@@ -0,0 +1,178 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.mapper;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.wsdl.Message;
import javax.wsdl.Part;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class MessageMapperImpl implements MessageMapper {
/**
* contains TypeMappers for each parts of the message
*/
private Map<String, TypeMapper> mappers;
private Map<String, Integer> partsOrder;
private Message message;
private boolean unwrapped;
protected MessageMapperImpl(Map<String, TypeMapper> mappers, Message message) {
this.mappers = mappers;
this.message = message;
partsOrder = new HashMap<String, Integer>(mappers.size());
int i = 0;
for (Part part : (List<Part>) message.getOrderedParts(null)) {
partsOrder.put(part.getName(), i);
i++;
}
}
public Message getMessage() {
return message;
}
public Object[] convertToParams(Object value) throws LocalizedException {
if (value instanceof Map) {
Map<String, Object> values = (Map<String, Object>) value;
return convertToParams(values);
} else if (value instanceof Object[]) {
Object[] values = (Object[]) value;
return convertToParams(values);
} else {
return convertToParams(new Object[]{value});
}
}
private Object[] convertToParams(Map<String, Object> values) throws LocalizedException {
if (unwrapped) {
TypeMapper typeMapper = mappers.entrySet().iterator().next().
getValue();
if (!(typeMapper instanceof ComplexTypeMapper)) {
throw new IllegalArgumentException("This message can't be unwrapped.");
}
ComplexTypeMapper complexTypeMapper = (ComplexTypeMapper) typeMapper;
Map.Entry<String, Object> entry = values.entrySet().iterator().next();
if (!(entry.getValue() instanceof Map)) {
throw new IllegalArgumentException("These params can't be unwrapped.");
}
return complexTypeMapper.convertToTypeUnwrapped((Map) entry.getValue());
} else {
Object[] params = new Object[mappers.size()];
for (Map.Entry<String, Object> entry : values.entrySet()) {
TypeMapper typeMapper = mappers.get(entry.getKey());
if (typeMapper == null) {
// TODO skip and warn ?
} else {
params[partsOrder.get(entry.getKey())] = typeMapper.
convertToType(entry.getValue());
}
}
return params;
}
}
private Object[] convertToParams(Object[] values) throws LocalizedException {
if (values == null) {
return null;
}
if (values.length == 0) {
return null;
}
if (unwrapped) {
TypeMapper typeMapper = mappers.entrySet().iterator().next().
getValue();
if (!(typeMapper instanceof ComplexTypeMapper)) {
throw new IllegalArgumentException("This message can't be unwrapped.");
}
ComplexTypeMapper complexTypeMapper = (ComplexTypeMapper) typeMapper;
Object value = values[0];
if (!(value instanceof Map)) {
throw new IllegalArgumentException("These params can't be unwrapped.");
}
return complexTypeMapper.convertToTypeUnwrapped((Map) value);
} else {
List<Part> orderedParts = message.getOrderedParts(null);
Object[] params = new Object[orderedParts.size()];
int i = 0;
for (Part part : orderedParts) {
if (i >= values.length) {
break;
}
params[i] = mappers.get(part.getName()).convertToType(values[i]);
i++;
}
return params;
}
}
public Map<String, Object> convertToValue(Object params[]) throws LocalizedException {
if (params == null || params != null && params.length == 0) {
return null;
}
if (unwrapped) {
Part part = (Part) message.getOrderedParts(null).get(0);
if (part == null) {
return null;
}
TypeMapper typeMapper = mappers.entrySet().iterator().next().
getValue();
if (!(typeMapper instanceof ComplexTypeMapper)) {
throw new IllegalArgumentException("This message can't be unwrapped.");
}
ComplexTypeMapper complexTypeMapper = (ComplexTypeMapper) typeMapper;
Map<String, Object> values = complexTypeMapper.typeToValueUnwrapped(params);
Map<String, Object> wrappedValue = new HashMap<String, Object>(1);
wrappedValue.put(part.getName(), values);
return wrappedValue;
} else {
List<Part> orderedParts = message.getOrderedParts(null);
Map<String, Object> values = new HashMap<String, Object>(params.length);
int i = 0;
for (Object param : params) {
Part part = orderedParts.get(i);
if (part == null) {
throw new IllegalArgumentException("Too much params.");
}
TypeMapper typeMapper = mappers.get(part.getName());
values.put(part.getName(), typeMapper.typeToValue(param));
i++;
}
return values;
}
}
public boolean isUnwrapped() {
return unwrapped;
}
public void setUnwrapped(boolean unwrapped) {
this.unwrapped = unwrapped;
}
}

View File

@@ -0,0 +1,25 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.mapper;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public interface PropertyMapper {
public Class<?> getMappedClass();
public String getMappedPropertyName();
public void setValueTo(Object destination, Object value) throws LocalizedException;
public Object getValueFrom(Object source) throws LocalizedException;
public Object createProperty(Object value) throws LocalizedException;
public Object createValue(Object property) throws LocalizedException;
}

View File

@@ -0,0 +1,16 @@
package org.talend.webservice.mapper;
import java.util.Map;
import javax.xml.namespace.QName;
import org.talend.webservice.exception.LocalizedException;
public class SimpleContentPropertyMapper extends SimplePropertyMapper {
public SimpleContentPropertyMapper(Class<?> clazz, QName typeQName, String propertyName, Map<QName, TypeMapper> schemaTypeMap)
throws LocalizedException {
super(clazz, typeQName, propertyName, schemaTypeMap);
}
}

View File

@@ -0,0 +1,121 @@
package org.talend.webservice.mapper;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;
import org.apache.commons.beanutils.PropertyUtils;
import org.talend.webservice.exception.IllegalPropertyAccessException;
import org.talend.webservice.exception.InvocationTargetPropertyAccessor;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public class SimplePropertyMapper implements PropertyMapper {
private Map<QName, TypeMapper> schemaTypeMap;
private TypeMapper xmlBeanMapper;
private String propertyName;
private PropertyDescriptor propertyDescriptor;
private QName schemaTypeQName;
public SimplePropertyMapper(Class<?> clazz, QName typeQName, String propertyName, Map<QName, TypeMapper> schemaTypeMap)
throws LocalizedException {
this.schemaTypeMap = schemaTypeMap;
this.schemaTypeQName = typeQName;
PropertyDescriptor[] descriptors = PropertyUtils.getPropertyDescriptors(clazz);
for (PropertyDescriptor descriptor : descriptors) {
if (propertyName.equalsIgnoreCase(descriptor.getName())) {
this.propertyName = descriptor.getName();
propertyDescriptor = descriptor;
break;
}
}
if (propertyDescriptor == null) {
throw new IllegalArgumentException("Unable to get propertyDescriptor for bean " + typeQName + " and property "
+ propertyName);
}
}
public String getMappedPropertyName() {
return propertyName;
}
public void setValueTo(Object destination, Object value) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
try {
Method method = propertyDescriptor.getWriteMethod();
if (method == null) {
method = propertyDescriptor.getReadMethod();
if (method != null) {
Object returnValue = method.invoke(destination);
if (returnValue instanceof List) {
List values = (List) returnValue;
Object tempValue = xmlBeanMapper.convertToType(value);
if (tempValue != null) {
values.addAll((List) tempValue);
}
}
}
} else {
if (method.getParameterTypes()[0].equals(JAXBElement.class)) {
value = new JAXBElement(new QName(getMappedPropertyName()), getMappedClass(),
xmlBeanMapper.convertToType(value));
propertyDescriptor.getWriteMethod().invoke(destination, value);
} else {
propertyDescriptor.getWriteMethod().invoke(destination, xmlBeanMapper.convertToType(value));
}
}
} catch (IllegalAccessException ex) {
throw new IllegalPropertyAccessException(propertyDescriptor.getName(), destination.getClass().getName(), ex);
} catch (InvocationTargetException ex) {
throw new InvocationTargetPropertyAccessor(propertyDescriptor.getName(), destination.getClass().getName(),
ex.getTargetException());
} catch (IllegalArgumentException ex) {
throw ex;
}
}
public Object getValueFrom(Object source) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
try {
Method method = propertyDescriptor.getReadMethod();
if (method.getReturnType().equals(JAXBElement.class)) {
JAXBElement jAXBElement = (JAXBElement) method.invoke(source);
return xmlBeanMapper.typeToValue(jAXBElement != null ? jAXBElement.getValue() : null);
} else {
return xmlBeanMapper.typeToValue(propertyDescriptor.getReadMethod().invoke(source));
}
} catch (IllegalAccessException ex) {
throw new IllegalPropertyAccessException(propertyDescriptor.getName(), source.getClass().getName(), ex);
} catch (InvocationTargetException ex) {
throw new InvocationTargetPropertyAccessor(propertyDescriptor.getName(), source.getClass().getName(),
ex.getTargetException());
}
}
public Class<?> getMappedClass() {
return schemaTypeMap.get(schemaTypeQName).getClazz();
}
public Object createProperty(Object value) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
return xmlBeanMapper.convertToType(value);
}
public Object createValue(Object property) throws LocalizedException {
xmlBeanMapper = schemaTypeMap.get(schemaTypeQName);
return xmlBeanMapper.typeToValue(property);
}
}

View File

@@ -0,0 +1,36 @@
/*
* To change this template, choose Tools | Templates and open the template in the editor.
*/
package org.talend.webservice.mapper;
import org.talend.webservice.mapper.converter.ConvertTool;
/**
*
* @author rlamarche
*/
public class SimpleTypeMapper implements TypeMapper {
private Class<?> clazz;
public SimpleTypeMapper(Class<?> clazz) {
this.clazz = clazz;
}
public Class<?> getClazz() {
return clazz;
}
public Object convertToType(Object value) {
if (value == null) {
return null;
} else {
// return ConvertUtils.convert(ConvertUtils.convert(value), clazz);
return ConvertTool.convert(value, clazz);// bug13001, for date type value
}
}
public Object typeToValue(Object bean) {
return bean;
}
}

View File

@@ -0,0 +1,20 @@
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.talend.webservice.mapper;
import org.talend.webservice.exception.LocalizedException;
/**
*
* @author rlamarche
*/
public interface TypeMapper {
public Class<?> getClazz();
public Object convertToType(Object value) throws LocalizedException;
public Object typeToValue(Object bean) throws LocalizedException;
}

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