Compare commits

...

271 Commits

Author SHA1 Message Date
SunChaoqun
79cb4521ef TESB-25671:Build DemoREST as MS Jar with maven script 2019-04-30 17:37:10 +08:00
kuanwang
f546409acb TUP-22747 delete useless class (#3441) 2019-04-29 16:40:09 +08:00
jiezhang-tlnd
31d35c048c fix(TUP-22484)Random issue: Compile error for simple job sometimes (#3438) 2019-04-29 11:12:43 +08:00
jiezhang-tlnd
ef708a8348 fix(TUP-22484)Random issue: Compile error for simple job sometimes (#3436)
* fix(TUP-22484)Random issue: Compile error for simple job sometimes

* fix(TUP-22484)before create maven project, clean the folder.

* fix(TUP-22484)Random issue: Compile error for simple job sometimes
2019-04-29 10:41:26 +08:00
wang wei
3909cadc0b fix(TDI-42241): make sybase components work in java 11 too (#3434)
* fix(TDI-42241): make sybase components work in java 11 too

* fix(TDI-42241): fix tsybaserow

* fix(TDI-42241): fix tcreatetable
2019-04-28 11:52:33 +08:00
wang wei
1292ddfa8b fix(TDI-42239): tLogCatcher and tAssertCatcher cause compilation error when used together(#3432) 2019-04-28 10:32:24 +08:00
hwang-talend
0c5e483893 bugfix(TUP-22744):711 built batch job doesn't run fine (#3423)
bugfix(TUP-22744):711 built batch job doesn't run fine
2019-04-28 10:13:02 +08:00
Jane Ding
f0b64d92c5 fix(TUP-22681)Job in CI Builder gets generated and deployed, but doesn't (#3427)
show as a Tag
https://jira.talendforge.org/browse/TUP-22681
2019-04-26 16:12:36 +08:00
Jane Ding
910b4d80d9 fix(TUP-22751)Message when trying to import a project having the same (#3431)
fix(TUP-22751)Message when trying to import a project having the same name as existing project is odd
https://jira.talendforge.org/browse/TUP-22751
2019-04-26 10:21:28 +08:00
Jane Ding
50771134b2 fix(TUP-22804)Job with component tSAPIDOCOutput not getting built (#3430)
https://jira.talendforge.org/browse/TUP-22804
2019-04-26 10:00:26 +08:00
hwang-talend
e79dbfc65a Hwang/tup 22649 (#3413)
* bugfix(TUP-22649):tELTOracleMap : wrong Generated SQL Select query after
patch TPS-2944
2019-04-25 14:59:01 +08:00
Hanna Liashchuk
a50648cc5c fix(TBD-8566): correct context var replacement in subqueries (#3420) 2019-04-24 16:13:52 +03:00
wang wei
0141a2021d fix(TDI-42186): sure to close the stream (#3428) 2019-04-24 12:30:35 +08:00
Laurent BOURGEOIS
b8c37376ea fix(TBD-8587) : Compiler error when di job use hbase components (#3426) 2019-04-23 22:39:19 +02:00
Antoine Parent
7c153538f9 fix(TBD-8603): tHiveRow compile error (#3425)
* fix(TBD-8603): tHiveRow compile error

Only add the log.info if log4j is enabled

* fix(TBD-8603): tHiveRow compile error

Only add the log.info if log4j is enabled
2019-04-23 17:55:22 +02:00
wang wei
da645d3ef4 fix(TDI-42223): some components not works when use java 11 (#3421) 2019-04-23 19:04:32 +08:00
wang wei
264c9bda35 fix(TDI-42100): Upgrade to ActiveMQ 5.15.9 in tMom/tSAP components (#3422) 2019-04-23 18:45:33 +08:00
Chao MENG
bcd9620908 feat(TUP-21546): Add commit mode on the studio (#3415)
https://jira.talendforge.org/browse/TUP-21546
2019-04-23 16:14:13 +08:00
hwang-talend
bb377c59f2 bugfix(TUP-22426):6.5.1]Test Case generation on tRunJob gives (#3417)
bugfix(TUP-22426):6.5.1]Test Case generation on tRunJob gives compilation error "row1 cannot be resolved to a variable"
2019-04-22 18:31:32 +08:00
nrousseau
ec0162809c fix wrong setup (#3418) 2019-04-22 12:19:48 +02:00
sizhaoliu
32a0fa4f21 feat(TDQ-16376): no need to migrate if CATEGORY field is present (#3416) 2019-04-19 16:37:55 +02:00
wang wei
480d80db93 fix(TDI-42053): [Java 11] Upgrade commons.lang3 version on javajet components (#3371)
* fix(TDI-42053): [Java 11] Upgrade commons.lang3 version on javajet
components

* fix(TDI-42053): revert the changeset for tacokit integration part

* fix(TDI-42053): revert the changeset for bigdata components
2019-04-19 18:01:49 +08:00
Hanna Liashchuk
5d074a1787 fix(TBD-8573): correct parsing date values from BigQuery (#3414) 2019-04-18 16:42:15 +03:00
hwang-talend
84eea35c62 bugfix(TUP-22435):tMap lost look-up details (#3403)
bugfix(TUP-22435):tMap lost look-up details
2019-04-17 18:00:26 +08:00
wang wei
79fe200121 fix(TDI-42172): not import activemq jar for ESB runtime (#3411) 2019-04-17 10:10:41 +08:00
hcyi
8e9614b94d fix(TUP-22587):NameNode URI fields changes to default value after (#3390)
changing the HDP version.
2019-04-16 17:13:00 +08:00
Hanna Liashchuk
396696ed31 fix(TBD-8570): correct error message handling (#3407) 2019-04-16 10:49:25 +03:00
hwang-talend
195932029b bugfix(TUP-22426):[6.5.1]Test Case generation on tRunJob gives (#3375)
compilation error "row1 cannot be resolved to a variable"
2019-04-16 12:48:09 +08:00
Zhiwei Xue
7f77637515 workitem(TUP-22161):Update version of CI plugins. (#3335) 2019-04-16 10:45:16 +08:00
Jane Ding
f4ae68641f fix(TUP-22620)java.lang.StackOverflowError exception when opening the (#3402)
job in studio
https://jira.talendforge.org/browse/TUP-22620
Since my new added test testCheckCircle is the first one to execute, it
used common variable node broke other test balance. Modify to use it own
private variable.
2019-04-15 17:09:01 +08:00
wang wei
0a49c27be6 TESB-25479 Switching to activemq 5.15.5 (#3385) (#3401)
* TESB-25479 Switching to activemq 5.15.5

* Switching to activemq 5.15.5 for tMomInputLoop

* Switching to activemq 5.15.5 for tMomOutput

* fix the maven path
2019-04-12 16:11:09 +08:00
hwang-talend
9711b099f9 Revert "bugfix(TUP-21895):An error has occurred. UNEXPECTED_EXCEPTION when (#3216)" (#3396)
Revert "bugfix(TUP-21895):An error has occurred. UNEXPECTED_EXCEPTION when
This reverts commit d553d5ed06.
2019-04-12 10:21:15 +08:00
Zhiwei Xue
8840aa1f78 fix(TUP-22619):Miss talend.project in final zip when publishing job in (#3387)
commandline.
2019-04-11 17:21:26 +08:00
wang wei
9093da5300 fix(TDI-42141): tReplacelist not replacing in order (#3398) 2019-04-11 17:03:39 +08:00
Denis Sergent
7c99ec2246 TESB-25472 Avoid InvalidThreadAccess to get the real error (#3393) 2019-04-11 10:39:59 +02:00
Jane Ding
a8285120c7 fix(TUP-22620)java.lang.StackOverflowError exception when opening the (#3391)
* fix(TUP-22620)java.lang.StackOverflowError exception when opening the
job in studio
https://jira.talendforge.org/browse/TUP-22620

* fix(TUP-22620)java.lang.StackOverflowError exception when opening the
job in studio
https://jira.talendforge.org/browse/TUP-22620
2019-04-11 15:50:31 +08:00
nrousseau
de666438af fix(TUP-22635) add missing dependency for server 2019-04-11 15:42:06 +08:00
Romain Manni-Bucau
8189d3d0f9 TUP-22648 ensure schema column types ar enot lost for talend component kit components (#3394) 2019-04-10 16:47:32 +02:00
wang wei
4bde039bff fix(TDI-42126): tHttpRequest cannot correctly handle multi-byte characters(#3392) 2019-04-10 18:29:35 +08:00
sizhaoliu
9b030dfc71 feat(TDQ-16376): add migration task for tDataMasking UI changes (#3384)
* feat(TDQ-16376): add migration task for tDataMasking UI changes

* remove debug info + extract constant

* fix issues with some functions and Spark/SparkStreaming jobs
2019-04-09 18:10:03 +02:00
wang wei
59f6d682da fix(TDI-29956): Lookup from tRESTClient ClassNotFoundException (#3380) 2019-04-09 18:31:59 +08:00
wang wei
54c6014e47 fix(TDI-24330): tSystem create a new row when using global variable output(#3381) 2019-04-09 18:28:59 +08:00
Romain Manni-Bucau
40654c88e4 preparing talend component kit 1.1.9 upgrade (#3383) 2019-04-09 18:23:30 +08:00
dlin-talend
df6a748a15 TUP-22445:Change new branding images for 7.2 (#3377) 2019-04-09 18:18:30 +08:00
hcyi
7e4a8d13ea fix(TUP-22590):CVE vulnerabilities - Eclipse Jetty Upgrade. (#3378)
* fix(TUP-22590):CVE vulnerabilities - Eclipse Jetty Upgrade.

* fix(TUP-22590):CVE vulnerabilities - Eclipse Jetty Upgrade.
2019-04-09 11:59:29 +08:00
TKaczynski
70540b48e9 fix(TBD-8343): NoSuchMethodError when Having tGSConnection and tS3Connection Components Within one Job (#3379)
update import
2019-04-08 14:35:08 +02:00
hcyi
ce6691a31b fix(TUP-22521):tHiveMap- Unexpected SQL syntax for 'case when (#3372)
...then....else' condition.
2019-04-08 15:26:27 +08:00
Roman
2106f0dd3b feat(TDI-41387): fix migration task (#3289) 2019-04-04 13:43:23 +03:00
jiezhang-tlnd
9d4816bc69 fix(TUP-22201)Cannot show suggestion of methods in tJava (#3376) 2019-04-04 18:24:08 +08:00
SunChaoqun
649b3a812c TESB-25438:SAM/Locator not work when tRestClient job deploy to Runtime (#3368) 2019-04-03 15:20:08 +08:00
Jane Ding
fd97d3b4e7 fix(TUP-21920)Nullpointer on build job (#3336)
https://jira.talendforge.org/browse/TUP-21920
Loop dependency classpath issue caused main class not found
2019-04-03 14:59:11 +08:00
jiezhang-tlnd
1568163ff8 fix(TUP-22395)Shouldn't be overwrite button for creating unexist (#3366)
directory for build job
2019-04-03 10:48:24 +08:00
jiezhang-tlnd
9dba659c3c fix(TUP-22395)Shouldn't be overwrite button for creating unexist directory for build job (#3362)
* fix(TUP-22395)Shouldn't be overwrite button for creating unexist
directory for build job

* fix(TUP-22395)Shouldn't be overwrite button for creating unexist
directory for build job

* fix(TUP-22395)Shouldn't be overwrite button for creating unexist
directory for build job

* fix(TUP-22395)Shouldn't be overwrite button for creating unexist
directory for build job
2019-04-03 10:32:26 +08:00
jiezhang-tlnd
9355e5b4a6 Jzhang/bugfix/tup 22165 progress information is not correct when building job reopen (#3357)
* fix(TUP-22165)Progress Information isn't correct when building job

* fix(TUP-22165)Progress Information isn't correct when building job
2019-04-03 10:07:57 +08:00
Jane Ding
0c0b4d0317 fix(TUP-22269)Twebservice throwing Null Pointer Exception (#3364)
https://jira.talendforge.org/browse/TUP-22269
2019-04-02 19:01:48 +08:00
Mike Yan
a90a9434a8 fix(TESB-25116): Fixed NPE for data viewer (#3363) 2019-04-02 16:49:39 +08:00
Liu Xinquan
b8bf58f282 TDQ-16354 TOP i18n preference page (#3344) 2019-04-02 16:35:12 +08:00
msjian
29159385b5 feat(TDQ-15039): support bigQuery type to generate correct query (#3356) 2019-04-02 16:21:05 +08:00
wang wei
3c522e7b15 fix(TDI-42072): NullPointerException when using the tDie component in the child job and execute the job from the parent job.(#3352) 2019-04-02 16:01:06 +08:00
Jane Ding
17fd958ce5 fix(TUP-22342)Joblet referring to objects that do not exist (#3355)
https://jira.talendforge.org/browse/TUP-22342
2019-04-02 10:17:15 +08:00
slushatel
2307f13545 feat(TDI-41963): change jdbc driver version from 1.2.16.1027 to 1.2.2… (#3327)
* feat(TDI-41963): change jdbc driver version from 1.2.16.1027 to 1.2.20.1043

* feat(TDI-41963): change redshift module name to "redshift-jdbc42-no-awssdk-1.2.20.1043.jar"
2019-04-01 14:37:36 +03:00
Chao MENG
f9e7590713 fix(TUP-22470): NPE shows after opening edit in conflict page and (#3348)
fix(TUP-22470): NPE shows after opening edit in conflict page and resolving the conflict
https://jira.talendforge.org/browse/TUP-22470
2019-04-01 14:34:13 +08:00
wang wei
275fab14f8 fix(TDI-41944): fix the code generate issue (#3354) 2019-03-30 14:28:44 +08:00
nrousseau
143742acd7 feat(TDI-41943) update tcomp/daikon dependencies 2019-03-30 11:29:01 +08:00
vizotenko-talend
3c52b631e9 bug(TDI-41626): [tCreateTemporaryFile] Safely create a temporary file (#3257) 2019-03-29 13:57:50 +02:00
nrousseau
c534373738 feat(TDI-41943) update tcomp/daikon dependencies 2019-03-29 18:01:26 +08:00
wang wei
338297f3ab fix(TDI-41944): [Java 11] Replace usage of sun.misc.Base64 to java.util.Base64(#3350) 2019-03-29 12:53:19 +08:00
Romain Manni-Bucau
0bb9dc7670 TCOMP-1353 ensure tcomp does not conflict with components (#3347) 2019-03-28 18:27:53 +08:00
chmyga
b3433def41 fix(TDI-42046): error DOCTYPE is disallowed (#3346) 2019-03-28 10:37:55 +02:00
Jane Ding
776437eaf4 fix(TUP-22269)Twebservice throwing Null Pointer Exception (#3349)
https://jira.talendforge.org/browse/TUP-22269
2019-03-28 10:14:51 +08:00
slushatel
372c3bf77a feat(TDI-41787): Upgrade to CXF 3.3.1 (#3338) 2019-03-26 11:28:14 +02:00
Dmytro Sylaiev
4913c935d5 fix(TDI-42024): Change execProt and execPBSZ order (#3333) 2019-03-26 10:14:57 +02:00
jiezhang-tlnd
03b45217a8 fix(TUP-22410)Can't import item which locate at root of disk after (#3345)
eclipse upgrade
2019-03-26 10:48:40 +08:00
wang wei
3e80011d86 fix(TDI-41898): Comment in the query in tJDBCInput component does not work if the job is migrated from 6.2.1 to 7.1.1(#3334) 2019-03-25 18:39:20 +08:00
jiezhang-tlnd
ca3610c9cb fix(TUP-22334)Error pops up when clicking if link (#3321)
* fix(TUP-22334)Error pops up when clicking if link

* fix(TUP-22334)Error pops up when clicking if link
2019-03-25 15:45:44 +08:00
jiezhang-tlnd
4d39844c21 Jzhang/bugfix/tup 22165 progress information is not correct when building job (#3308)
* fix(TUP-22165)Progress Information isn't correct when building job

* fix(TUP-22165)Progress Information isn't correct when building job

* fix(TUP-22165)Progress Information isn't correct when building job
2019-03-25 10:31:40 +08:00
Mike Yan
d7b6c014dd fix(TESB-25116): Fixed JUnit error for NPE (#3331) 2019-03-21 17:41:33 +08:00
Hanna Liashchuk
30288171b7 fix(TBD-8496): field separator for service account bigquery (#3329) 2019-03-20 18:25:46 +01:00
apoltavtsev
7b40eddb53 TESB-24730 Services no longer accessible ( NPE) after route deployment 2019-03-20 13:50:26 +03:00
Vladimir Bogatyrov
f05b633e0e [TESB-25164] Intermittent "ClassNotFoundException: javax.mail.Address" errors (#3326) 2019-03-20 09:27:47 +02:00
Hanna Liashchuk
23aba4a3c4 fix(TBD-8484): REQUIRED/NULLABLE columns are created according to schema (#3324) 2019-03-19 18:21:49 +02:00
chmyga
c47bedbc88 Dchmyga/tdi 41663 secure saxparserfactory config library (#3243)
* fix(TDI-41663): Secure SAXParserFactory config

* Move TalendSAX library from ant to mvn

* fix(TDI-41663): Secure SAXParserFactory config

* Fix classes in talendsax library

* fix(TDI-41663): Secure SAXParserFactory config

* Move talendMQRFH2 library to mvn

* fix(TDI-41663): Secure SAXParserFactory config

* Fix classes in talendMQRFH2 library

* fix(TDI-41663): Secure SAXParserFactory config

* Change talendMQRFH2 library version in talendMQConnectionUtil library

* fix(TDI-41663): Secure SAXParserFactory config

* Remove jars from repository

* Add automatic jars downloading to required plugins

* fix(TDI-41663): Secure SAXParserFactory config

* Update libraries versions in components

* fix(TDI-41663): Secure SAXParserFactory config

* Fix library dependencies

* Fix the build

* Refactor code to fix the tests

* fix(TDI-41663): Secure SAXParserFactory config

* Fix PR comments

* fix(TDI-41663): Secure SAXParserFactory config

* Fix PR comments

* fix(TDI-41663): Secure SAXParserFactory config

* Fix tests

* Remove not required classes

* fix(TDI-41663): Secure SAXParserFactory config

* Fix PR comments

* fix(TDI-41663): Secure SAXParserFactory config

* Bump TalendSAX version

* fix(TDI-41663): Secure SAXParserFactory config

* Remove unnecessary imports
2019-03-19 11:41:19 +02:00
wang wei
531d9d042b fix(TDI-41894): Randomly the job fails with "java.security.SignatureException: Invalid encoding for signature" error. (#3323) 2019-03-19 16:25:28 +08:00
Mike Yan
3e5bafd2c6 fix(TESB-25116):Build microservice jar with ctalendjob is only 2kb (#3317) 2019-03-19 11:15:05 +08:00
Hanna Liashchuk
d10e0a7776 Hliashchuk/fix/tbd 8356 bigquery empty strings (#3322)
* fix(TBD-8356): empty strings handling in bigquery

* fix(TBD-8356): service account empty strings support
2019-03-18 19:00:55 +02:00
chmyga
fed318cea2 fix(TDI-41951): special chars in column comment (#3318)
* Use text escape method usage in SPSOutput and SalesforceWaveBulkExec components
2019-03-18 15:21:37 +02:00
Dmytro Sylaiev
b42c990006 fix(TDI-41896): Upgrade jackson-databind version (#3293)
* fix(TDI-41896): Upgrade jackson-databind version

* fix(TDI-41896): Bump library version
2019-03-15 10:43:45 +02:00
chmyga
99b32aef61 Dchmyga/tdi 41648 replace sun x509 with default algorithm (#3220)
* fix(TDI-41648): Replace SunX509 as the default algorithm

* Move talendssl library to mvn

* fix(TDI-41648): Replace SunX509 as the default algorithm

* Replace SunX509 as default algorithm

* Fix problem when all certificates were trusted by default

* Replace deprecated com.sun classes with javax.security classes

* fix(TDI-41648): Replace SunX509 as the default algorithm

* Add migration task

* fix(TDI-41648): Replace SunX509 as the default algorithm

* remove legacy code with internal sun classes

* fix(TDI-41648): Replace SunX509 as the default algorithm

* Fix talend-ws library class

* Update talend-ws library version

* fix(TDI-41648): Replace SunX509 as the default algorithm

* Update components with new talendssl library version

* Fix PR comment

* Fix formatting

* fix(TDI-41648): Replace SunX509 as the default algorithm

* Fix PR comments

* fix(TDI-41648): Replace SunX509 as the default algorithm

* fix library name to be downloaded during build
2019-03-15 10:35:53 +02:00
kjwang-talend
1aff5b8292 kjwang/Fix-TUP-21903 tSalesForceConnection fix junit (#3314)
https://jira.talendforge.org/browse/TUP-21903
2019-03-15 14:24:24 +08:00
Denis Sergent
aa502fbbda TESB-25045 Authorize Docker Build for job with tRESTClient (#3312)
Fix side effect: unauthorized "Finnish" button while input fields are
correct.
2019-03-14 13:47:34 +01:00
Carlos Carvajal
bb6eaa5c43 Revert "fix(TBD-8356): tBigqueryOutput handles empty strings as null (#3277)" (#3313)
This reverts commit 99951891e9.
2019-03-13 11:43:00 +01:00
Tao Tao
c3f90750df fix(TUP-21903):tSalesForceConnection JWT flow does not work with Context (#3254)
* fix(TUP-21903):tSalesForceConnection JWT flow does not work with Context
group variable set for connection type Oauth.
2019-03-13 16:05:50 +08:00
pyzhou
89402325e7 fix(TDI-41789): Redshift change migration logic (#3304) 2019-03-12 16:55:11 +08:00
hcyi
a6c3a11e54 feat(TUP-21495):Support MFA on studio for the Cloud. (#3253)
* feat(TUP-21495):Support MFA on studio for the Cloud.

* feat(TUP-21495):improve for Support MFA on studio for the Cloud.

* feat(TUP-21495):improve for Support MFA on studio for the Cloud.

* feat(TUP-21495):improve for connection GUI part.

* fix(TUP-22063)[bug] when use different cloud type,click ... to fetch (#3270)

* fix(TUP-22063)[bug] when use different cloud type,click ... to fetch
token will all open the same url.
https://jira.talendforge.org/browse/TUP-22063

* fix(TUP-22063)[bug] when use different cloud type,click ... to fetch
token will all open the same url.
https://jira.talendforge.org/browse/TUP-22063

* fix(TUP-22063)[bug] when use different cloud type,click ... to fetch
token will all open the same url.
https://jira.talendforge.org/browse/TUP-22063

* fix(TUP-22063)[bug] when use different cloud type,click ... to fetch (#3274)

token will all open the same url.
https://jira.talendforge.org/browse/TUP-22063

* fix(TUP-22144)[bug] UX suggestion for layout of password/token.
https://jira.talendforge.org/browse/TUP-22144

* feat(TUP-21495):TUP-22141 [bug] update and save the connection in create
connection page will make the token change.

* feat(TUP-21495):TUP-22140 [bug] In create connection page, there is no
response when click ... button to fetch token if the cloud url is
removed.
2019-03-08 10:31:41 +08:00
Dmytro Sylaiev
f96f3171d1 fix(TDI-41897): Fix compile error on generated code (#3294) 2019-03-07 14:55:22 +02:00
pyzhou
76b1eb7da6 Pyzhou/tdi 41910 t s3 check connection (#3303)
* fix(TDI-41910):tS3Connecyion uncheck connection

* add logic to divide job from 6.3.0 or before
2019-03-07 17:43:15 +08:00
Jane Ding
894ca53e5a fix(TUP-21920) Nullpointer on build job (#3266) 2019-03-07 17:27:38 +08:00
Dmytro Sylaiev
4bc344bec5 fix(TDI-41808): Fix showing pass as clear text NZLoad (#3269)
* fix(TDI-41808): Fix showing pass as clear text NZLoad

* fix(TDI-41808): Rewrite fix to be more efficient

* chore(TDI-41808): Fix indentation

* fix(TDI-41808): Avoid to show real length of password

* fix(TDI-41808): Use constant from util class
2019-03-07 11:13:11 +02:00
Chao MENG
69a9e3ca83 Studio upgrade/eclipse 4.10.0 (#3298)
* fix(TUP-19969): Eclipse upgrade - TOS need to work with eclipse 4.7.0
https://jira.talendforge.org/browse/TUP-19969

* fix(TUP-19969): Eclipse upgrade - TOS need to work with eclipse 4.7.0
https://jira.talendforge.org/browse/TUP-19969

* Fix :TUP-21173 Make compilation test with Java 11
https://jira.talendforge.org/browse/TUP-21173
Fix :TUP-21173 Make compilation test with Java 11
https://jira.talendforge.org/browse/TUP-21173
Fix :TUP-21173 Make compilation test with Java 11
https://jira.talendforge.org/browse/TUP-21173
Fix :TUP-21173 Make compilation test with Java 11
https://jira.talendforge.org/browse/TUP-21173

* item(TUP-21339): Eclipse upgrade - TOS need to work with eclipse 4.10.0

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

* item(TUP-21339): Eclipse upgrade - TOS need to work with eclipse 4.10.0

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

* item(TUP-21339): Eclipse upgrade - TOS need to work with eclipse 4.10.0

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

* item(TUP-21731): Fix button font color issue for mac / linux

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

* item(TUP-21701): Eclipse upgrade - make core part of EE product building

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

* fix(TUP-21730)Fix import project (need re-develop new UI) (#3204)

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

* fix(TUP-21730)Fix import project (need re-develop new UI) (#3204)

https://jira.talendforge.org/browse/TUP-21730
Fix UI display problem on Linux

* item(TUP-21731): Fix button font color issue for mac / linux

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

* fix(TUP-22042): A blank shell is opened when saving job

https://jira.talendforge.org/browse/TUP-22042
I checked the api of Shell on Linux and Windows (Eclipse 4.10)
On Linux, the open method of Shell will open it's parent shell, seems no
way to avoid it.
On Windows, the open method of Shell won't open parent shell.

I think the only way to avoid empty shell on Linux is changing all the
codes which creating empty shell, I think we can even give a null if no
active shell found.

* item(TUP-22069): Cannot run job using tOracleInput

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

* fix(TUP-22066)Font color in Run console is black, it should be blue (#3275)

* fix(TUP-22062)Error pops up when typing tJava in job editor (#3273)
2019-03-07 10:21:03 +08:00
hcyi
896bed8875 fix(TUP-21777):[7.0.1] Metadata Wizard with SSL cannot retrieve cluster (#3296)
settings.
2019-03-07 09:49:14 +08:00
Hanna Liashchuk
bd3301dc51 fix(TBD-7153): Fixed missing mappings for BigQuery (#3291) 2019-03-06 14:28:13 +02:00
Dmytro Sylaiev
c71b2f994f fix(TDI-31429): Avoid compile error for byte array (#3290) 2019-03-06 10:36:15 +02:00
slushatel
04be41abf8 feat(TDI-41807): add rules for oracle 12/18 (#3267)
* feat(TDI-41807): add rules for oracle 12/18

* feat(TDI-41807): add rules for oracle 12/18

* feat(TDI-41807): add rules for oracle 12/18
2019-03-05 11:09:51 +02:00
Zhiwei Xue
4b99b199cc fix(TUP-22000):remove job cache when deleting job. (#3283) 2019-03-05 10:53:53 +08:00
Denis Sergent
48882724ac fix(TESB-24920) (#3286)
* TESB-21832 Problems with job/route exec. with local runtime in Studio

Local runtime for Studio job/routes execution should not be used in some
cases: build type has to be checked to define the best execution
processor. As execution processor must change when build type is updated
in deployment tab, processor can not be persisted anymore.

* Studio graphical improvements

Fixed some graphical inconsistencies in Studio (borders, margins...)

* TESB-22230 NPE in build item wizard when changing build type

* TESB-22230 NPE in build item wizard when changing build type

* TESB-22230 NPE in build item wizard when changing build type

* TESB-24920 Default endpoint URI not added to endpoint with cRest

This commit improves the way endpoint URL is displayed in console when a
Route/Dataservice is ran in Studio (in case context variables are used).

* Revert "TESB-24920 Default endpoint URI not added to endpoint with cRest"

This reverts commit 0f43b7d406.

* TESB-24920 Default endpoint URI not added to endpoint with cRest

This commit improves the way endpoint URL is displayed in console when a
Route/Dataservice is ran in Studio (in case context variables are used).
2019-03-04 11:18:34 +01:00
Denis Sergent
7b05a057b0 TESB-25045 Authorize Docker Build for job with tRESTClient (#3287)
* TESB-25045 Authorize Docker Build for job with tRESTClient

Jobs containing tRESTClient or tESBConsumer components can be build as
Job standalone. Thereby it is now also possible to package build as a
Docker image. This commit also improve the way error messages are manage
in build wizard: before, a displayed error message could wrongly
disappear because of new controls for docker export details.

* TESB-25045 Authorize Docker Build for job with tRESTClient

Message update
2019-03-04 10:50:33 +01:00
hwang-talend
437df1c3c5 bugfix(TUP-21944):Problem with globalMap.get in tELTOracleOutput (#3261)
* bugfix(TUP-21944):Problem with globalMap.get in tELTOracleOutput
component
2019-03-04 11:14:57 +08:00
jiezhang-tlnd
0742691497 fix(TUP-21733)Fix Help About string missing (#3285) 2019-03-01 18:56:31 +08:00
sponomarova
99951891e9 fix(TBD-8356): tBigqueryOutput handles empty strings as null (#3277)
* fix(TBD-8356): tBigqueryOutput handles empty strings as null

* fix(TBD-8356): add explanation comment to TBD-8356 fix
2019-02-28 17:55:47 +01:00
Mike Yan
7e3c8888e1 fix(TUP-22103): Fixed joblet running error with default processor (#3280)
* fix(TUP-22103): Fixed joblet running error with default processor

* fix(TUP-22103): Improve conditions for checking only esb type items
2019-02-28 18:03:34 +08:00
jiezhang-tlnd
5745ce1d28 fix(TUP-5535)rename salesforce connection,the new name can't be reload (#3212)
in job
2019-02-26 17:05:31 +08:00
Emmanuel GALLOIS
c23955d51f fix(TDI-41795): migrate correctly connection and linked connection (#3251)
* fix(TDI-41795): migrate correctly connection and linked connection
* fix(TDI-41795): fix invalid char in properties files
* chore(TDI-41795): do net set value at each property, just once
* fix(TDI-41795): correct NPE for tGoogleDriveCopy/Put
* fix(TDI-41795): do not corrupt tcompv0 components
  - fix migration version and breaks
  - do not execute migration for tcompv0 components
2019-02-26 09:20:08 +01:00
jiezhang-tlnd
77aa27ccac fix(TUP-21998)JDBC Connection doesn't work well (#3252) 2019-02-26 16:11:52 +08:00
Zhiwei Xue
e0310bfb60 fix(TUP-21983):NullPointerException When publishing a job as docker (#3256) 2019-02-26 16:00:25 +08:00
pyzhou
0f323ab700 Pyzhou/TDI-41789 t redshift fixed log path (#3260)
* fix(TDI-41789): tRedshift require log file path

* redirect log to console

* change tab to space
2019-02-26 14:29:31 +08:00
SunChaoqun
718a5d005e TESB-25024:cTalendJob with job could not be build as OSGi bundle (#3265) 2019-02-21 18:21:55 +08:00
Roman
8fa59aefe9 fix(TDI-41517): Manager was updated with Object type (#3198) 2019-02-21 08:35:30 +02:00
jiezhang-tlnd
a5f43e31e6 fix(TUP-21994)error occurred when open a job from di side (#3249) 2019-02-20 15:59:33 +08:00
jiezhang-tlnd
18fc81a240 fix(TUP-21849)Salesforce name was changed while it is being edited for spec (#3250)
* fix(TUP-21849)Salesforce name was changed while it is being edited for
spec

* fix(TUP-21849)Salesforce: name was changed while it is being edited for
spec
2019-02-20 15:58:27 +08:00
pyzhou
68836af2d3 fix(TDI-41665):shutdown transfer manager right after download. (#3239)
* fix(TDI-41665):shutdown transfer manager right after download.

* correct EOF

* get shutdown method out of the use conn logic
2019-02-19 17:32:16 +08:00
msjian
2538b24196 fix(TDQ-10842): fix can export the user define report template files (#3240) 2019-02-18 15:35:26 +08:00
jiezhang-tlnd
7255747144 fix(TUP-21958)No Warning sign on different 'Nullable' checkbox state (#3238)
between two components
2019-02-15 15:30:06 +08:00
SunChaoqun
f0bc81e9b6 TESB-24959:Error message when building Data Service as Docker Image with (#3242)
tRESTClient component
2019-02-15 14:52:19 +08:00
hwang-talend
d553d5ed06 bugfix(TUP-21895):An error has occurred. UNEXPECTED_EXCEPTION when (#3216)
opening job migrated 6.4.1 to 7.1.1 (job using tJDBCInput)
2019-02-13 16:19:24 +08:00
hcyi
f5b2456c9f fix(TUP-21888):NPE when importing job. (#3234) 2019-02-13 16:17:08 +08:00
apoltavtsev
7f045834e5 TESB-24784 Connection condition parameters are propagated to Test Route 2019-02-12 20:24:09 +03:00
Antoine Parent
899eab4a2b fix(TBD-8299): Compile error on BigQuery Component (#3235)
Error was fixed for one component, but still present when multiple
components were used.
Changed the <%cid%> to <%=cid%>
2019-02-12 15:05:12 +01:00
apoltavtsev
d2d3a37b41 TESB-22085:Dynamic schema column type is always String in Runtime 2019-02-11 10:48:23 +03:00
Laurent BOURGEOIS
c42ccb1fe4 fix(TBD-8301) : Use Regional Location for BigQuery datasets (#3228) 2019-02-07 15:37:57 +01:00
Antoine Parent
d66773ec0d fix(TBD-8299): tBigQueryOutput compile error (#3225)
Add a <%cid%> to prevent a compile error when using more than one
tBigQueryOuput
2019-02-06 16:29:30 +01:00
Antoine Parent
ce310ab73f fix(TBD-8102): tBigQueryInput compile error (#3222)
Just add a <%cid%> to prevent a compile error when more using more than
one tBigQueryInput
2019-02-06 14:24:22 +01:00
Ivan Gonchar
9e88f2c2c8 fix(TUP-21916): set application/json content-type for component-manager healthcheck request (#3221) 2019-02-05 17:09:00 +02:00
Dmytro Sylaiev
3c1664b5a6 fix(TDI-41715): Fix primitive array processing (#3219)
* fix(TDI-41715): Fix primitive array processing

* Fix compile error when not Object type specified in schema

* Remove unused property

* Remove labels

* fix(TDI-41715): Fix null string processing
2019-02-05 14:54:40 +02:00
chmyga
31beed6bc8 fix(TDI-41647): Replace com.sun.org.apache.xerces.internal.dom.Elemen… (#3180)
* fix(TDI-41647): Replace com.sun.org.apache.xerces.internal.dom.ElementNSImpl

* Remove outdated talend-ws library

* Update component to use updated talend-ws library

* Update pom.xml to copy updated talend-ws library on build

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

* Update lib version
2019-02-04 14:27:34 +02:00
sponomarova
b0fa04eba8 fix(TBD-8269): Talend is automatically converting BigDecimal type to String (#3211) 2019-01-31 11:10:23 +01:00
sponomarova
a67fd68b79 fix(TBD-8260): compile error for tBigQueryOutput (#3210) 2019-01-31 11:17:31 +02:00
hwang-talend
0415268aeb bugfix(TUP-21711):Incorrect DataType retrieved when guess schema option (#3189)
bugfix(TUP-21711):Incorrect DataType retrieved when guess schema option is used in MSSQL Connection in Studio
2019-01-30 11:04:05 +08: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
Dmytro Sylaiev
3b399cfdac fix(TDI-41404): Avoid 64kb method issue when too many context paramet… (#3025)
* fix(TDI-41404): Avoid 64kb method issue when too many context parameter exists

* fix(TDI-41404): Regain missing warnings
2018-12-18 10:19:36 +02:00
zwxue
36fe13c958 fix(TUP-21175): fix Junits. (#3064) 2018-12-18 14:11:15 +08:00
Tao Tao
9d9a32a7eb bugfix(TUP-21336): Run view console result is not synchronized when I (#3067)
switch different job on job editor

https://jira.talendforge.org/browse/TUP-21336
2018-12-18 11:35:22 +08:00
hcyi
e067d98e0b fix(TUP-21356):talend-bigdata-launcher-1.2.0-20170410.jar not found when (#3076)
spark job launched from standard job by jobserver.
2018-12-14 19:16:45 +08:00
Chao MENG
16e45df096 fix(TUP-21461): Routine libraries can't be updated to pom.xml of routine (#3073)
fix(TUP-21461): Routine libraries can't be updated to pom.xml of routine in special case
https://jira.talendforge.org/browse/TUP-21461
2018-12-14 18:15:23 +08:00
chmyga
e9b55cded6 fix(TDI-32185): fix limit for dynamic columns (#2468)
* fix(TDI-32185): fix limit for dynamic columns

* Add one line to limit

* fix(TDI-32185): fix limit for dynamic columns

* Add migration task to decrement limit for old jobs

* fix(TDI-32185): fix limit for dynamic columns

* Handle context variables in migration task

* fix(TDI-32185): fix limit for dynamic columns

* Fix issue for empty limit

* fix(TDI-32185): fix limit for dynamic columns

* Fix migration task

* fix(TDI-32185): fix limit for dynamic columns

* Fix migration task
2018-12-13 13:47:35 +02:00
hcyi
e2a08da5c2 fix(TUP-21167):Install Additional Packages has no available modules. (#3062) 2018-12-12 21:11:12 +08:00
jiezhang-tlnd
c8ed02cd6a add junit for(TUP-2136) (#3055) 2018-12-12 16:08:36 +08:00
kcoepeau
af88f68da4 fix(TBD-8089): Hive requiring user when not needed (#3061) 2018-12-11 08:21:34 +01:00
chmyga
0c8bebcc3e fix(TDI-41469): tFileUnarchive zip64 format error (#3026)
* fix(TDI-41469): tFileUnarchive zip64 format error

* Use apache commons compress in checkArchive lib

* fix(TDI-41469): tFileUnarchive zip64 format error

* Remove unused method
2018-12-10 17:09:03 +02:00
zwxue
75eacb82ad fix(TUP-21261): force to reload sreenshot (#3051) 2018-12-10 10:42:57 +08:00
nrousseau
01afae2cf9 fix(TUP-21175) avoid exception during junit execution 2018-12-10 10:17:15 +08:00
Tao Tao
06a0e49aa1 bugfix(TUP-21356):"talend-bigdata-launcher-1.2.0-20170410.jar" not found (#3054)
when spark job launched from standard job by jobserver

https://jira.talendforge.org/browse/TUP-21356?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel
2018-12-10 10:04:30 +08:00
hwang-talend
1a1cc37f6b bugfix(TUP-21134):"Throw an error if the file already exist" is ticked (#3030)
#2052
2018-12-07 11:49:19 +08:00
Jane Ding
5332cdda92 fix(TUP-21138)Ubuntu18: Resources: Job which uses Resources run failed (#3046)
if its name contains uppercase letter
https://jira.talendforge.org/browse/TUP-21138
2018-12-06 10:43:25 +08:00
Romain Manni-Bucau
40b8104434 layout should rather use list than set, ensure it is typed on the code (#3038) 2018-12-05 20:23:19 +02:00
Jane Ding
91301b6fa3 fix(TUP-21245)faile to check JDBC connection with context Migrate from (#3034)
6.4.1 to 7.1.1
https://jira.talendforge.org/browse/TUP-21245
2018-12-05 14:58:57 +08:00
jiezhang-tlnd
94bb10031f fix(TUP-21326)Guess Schema has error if use existing connection in (#3032)
Joblet
2018-12-05 14:56:08 +08:00
Dmytro Sylaiev
37c11f688b Dsylaiev/tdi 41440 update jackson databind version in custom lib (#3043)
* fix(TDI-31328): Add default datePattern to SVNLogInput locked schema

* fix(TDI-41440): Update jackson-databind version

* fix(TDI-41440): Add nexus repos for maven deploy

* fix(TDI-41440): Add missing nexus uri

* fix(TDI-41440): Remove redundant UTF-8 property
2018-12-04 16:40:28 +02:00
jiezhang-tlnd
19f9498353 junit(TUP-21094) (#3021)
* junit(TUP-21094)

* add junit(TUP-21094)

* add junit(TUP-21094)

* junit(TUP-21094)
2018-12-04 15:29:05 +08:00
hwang-talend
68dcd32d14 bugfix(TUP-21105):tDBConnection(Snowflake) issue within joblet. (#3027)
* bugfix(TUP-21105):tDBConnection(Snowflake) issue within joblet.

* bugfix(TUP-21105):tDBConnection(Snowflake) issue within joblet.
2018-12-04 14:30:25 +08:00
hcyi
667e5d6ec3 fix(TUP-21042):Edit and update the used context group,will show double (#2864)
value and context view vanish.
2018-12-04 14:20:34 +08:00
zwxue
180ab51568 fix(TUP-21175):fix JUnit (#3039) 2018-12-04 10:54:07 +08:00
hcyi
16dfae34e9 fix(TUP-21160):refix JDBC connection will not commit even if autocommit (#3033)
is set to True.
2018-12-04 09:55:50 +08:00
Dmytro Sylaiev
6d41a51fb2 Dsylaiev/tdi 41440 update jackson databind version in custom lib (#3037)
* fix(TDI-31328): Add default datePattern to SVNLogInput locked schema

* fix(TDI-41440): Update jackson-databind version

* fix(TDI-41440): Add nexus repos for maven deploy
2018-12-03 16:35:04 +02:00
pyzhou
7505aaabe8 Pyzhou/tdi 41474 s3 check connection option (#3035)
* fix(TDI-41474):S3 check connection option.

* change EOF
2018-12-03 19:39:53 +08:00
kjwang-talend
0d1baec2c7 TUP-21298 get wrong result when logon main project and run job in reference project with same name (#3012)
* TUP-21298 get wrong result when logon main project and run job in
reference project with same name
https://jira.talendforge.org/browse/TUP-21298

* TUP-21298 get wrong result when logon main project and run job in
reference project with same name (Fix a link to editor problem)
https://jira.talendforge.org/browse/TUP-21298
2018-11-30 15:59:11 +08:00
zwxue
688e671c32 fix(TUP-21261):generate pom for save as of job. (#3023) 2018-11-30 15:33:21 +08:00
Jane Ding
d3361c4281 fix(TUP-21126)Not able to use routines from Reference project (#3024)
* fix(TUP-21126)Not able to use routines from Reference project
https://jira.talendforge.org/browse/TUP-21126

* fix(TUP-21126)Not able to use routines from Reference project
https://jira.talendforge.org/browse/TUP-21126
2018-11-30 11:05:35 +08:00
Tao Tao
35b86f26e8 feat(TUP-21109): Deprecate build of sources from Build job menu (#3022)
https://jira.talendforge.org/browse/TUP-21109
2018-11-29 15:04:48 +08:00
Tao Tao
814cf7599d bugfix(TUP-21216):Audit:Generate Report:NPE when do refresh (#3007)
https://jira.talendforge.org/browse/TUP-21216
2018-11-29 12:40:51 +08:00
zwxue
f1e5205ff5 fix(TUP-21252):tMap losing all links in testcase when we do some (#3013)
modification in the main job in the same component
2018-11-29 11:11:36 +08:00
Ivan Gonchar
b094d9555b feat: upgrade Tacokit runtime to 1.1.2 (#3020) 2018-11-29 09:56:53 +08:00
Mike Yan
7a564b7dbf fix(TESB-22833):CI builder NoClassDefFoundError error with routelet (#2996)
* fix(TESB-23792): Build data service failed in studio

* fix(TESB-22833):CI builder NoClassDefFoundError error with routelet
2018-11-28 11:17:09 +01:00
Dmytro Sylaiev
bc661de659 Dsylaiev/tdi 41440 update jackson databind version in custom lib (#3002)
* fix(TDI-31328): Add default datePattern to SVNLogInput locked schema

* fix(TDI-41440): Update jackson-databind version
2018-11-28 11:09:35 +02:00
hwang-talend
86cf48ad2c Hwang/tup 21164 (#3004)
* bugfix(TUP-21164):Context is not recognized as context variable in ELT
Map components and is not separated with string concat from SQL code
2018-11-28 11:26:41 +08:00
Ivan Gonchar
a0fa43b4af Igonchar/tup 20921 remove prefixes (#3009)
* fix(igonchar/TUP-20921): remove schema prefixes from Layout instances

* fix(igonchar/TUP-20921): remove schema prefixes from TacokitDndHandler

* fix(igonchar/TUP-20921): remove schema prefixes from tests
2018-11-27 16:41:23 +02:00
jiezhang-tlnd
809ed05555 fix(TUP-21094)Job can not be run after the first time I set tELTMap and (#3000)
run the job
2018-11-27 15:54:28 +08:00
Tao Tao
bd87559333 bugfix(TUP-21203)D&D resource to Job: even not support it , but studio (#2998)
behavior like we support it

https://jira.talendforge.org/browse/TUP-21203
2018-11-27 15:38:26 +08:00
jiezhang-tlnd
b87e3d0d94 Jzhang/bugfix/tup 20880 repository share show warn dialog choice should also exists for local project (#2999)
* fix(TUP-20880)Repository share: show warn dialog choice should also
exists for local project

* fix(TUP-20880)Repository share: show warn dialog choice should also
exists for local project

* fix(TUP-20880)repository share show warn dialog choice should also
exists for local project

* fix(TUP-20880)repository share show warn dialog choice should also
exists for local project
2018-11-27 10:22:03 +08:00
ypiel
40fe987857 fix(TDI-41394) : Qa fix - tCreateTable+Vertica9
* fix(TDI-41394) : Qa fix - Properties from metadata

* fix(TDI-41394) : QA Fix - Vertica9 as default

* fix(TDI-41394) : remove UrlPath thatwas not anymore on master
2018-11-26 16:26:05 +01:00
jiezhang-tlnd
536d85b4da fix(TUP-20978)Version change back after add new item on page "Deployment (#2985)
* fix(TUP-20978)Version change back after add new item on page "Deployment
versioning"
https://jira.talendforge.org/browse/TUP-20978

* fix(TUP-20978)Version change back after add new item on page "Deployment

* fix(TUP-20978)Version change back after add new item on page "Deployment
versioning"
2018-11-26 17:28:39 +08:00
Ivan Gonchar
5ffc29ab92 Igonchar/tup 20926 second try (#2995)
* fix(TUP-20926): move metadata retrieval from SchemaActionParameter to SchemaElementParameter

* fix(TUP-20926): implement set schema after update action

* fix(TUP-20926): remove unusued import

* fix(TUP-20926): add unit-tests for SchemaElementParameter

* fix(TUP-20926): add mockito dependency

* fix(TUP-20926): create schema widget only for output schema

* fix(TUP-20926): allow to override SchemaElementParameter.getMetadata()

* fix(TUP-20926): create ListPropertyNode for input schema

* fix(TUP-20926): implement InputSchemaParameter

* fix(TUP-20926): modify SettingVisitor to create InputSchemaParameter for input schemas

* fix(TUP-20926): move InputSchemaCreation from SettingVisitor to Constructor

* fix(TUP-20926): move discover schema name to PropertyDefinitionDecorator.Conenction class

* fix(TUP-20926): extract OutputSchemaParameter

* fix(TUP-20926): move OutputSchema creation from SettingVisitor to OutputSchemaParameter

* fix(TUP-20926): move const to OutputSchemaParameter

* fix(TUP-20926): refactor canAddGuessSchema()

* fix(TUP-20926): fix OutputSchemaParameter.schemaDisplayName()

* fix(TUP-20926): get rid of TACOKIT_INPUT_SCHEMA field type

* fix(TUP-20926): fix according review comments

* Revert "fix(TUP-20926): get rid of TACOKIT_INPUT_SCHEMA field type"

This reverts commit 13cea83260.

* fix(TUP-20926): add Input schema value to Configuration in runtime
2018-11-23 16:34:40 +08:00
pyzhou
04e8a156c5 fix(TDI-41377):Remove jtds.jar from studio. (#2964) 2018-11-23 15:24:22 +08:00
jiezhang-tlnd
7ccd48ee16 fix(TUP-21145)use equals instead (#2988)
* fix(TUP-21145)use equals instead
2018-11-23 14:36:40 +08:00
Mike Yan
8583805ade fix(TESB-23792): Build data service failed in studio (#2847) 2018-11-23 10:58:05 +08:00
hwang-talend
0a0637cd03 bugfix(TUP-21118):Code view/test case still link last component even all (#2969)
bugfix(TUP-21118):Code view/test case still link last component even all job editor closed
2018-11-23 10:57:00 +08:00
hwang-talend
83aa70047d bugfix(TUP-21164):Context is not recognized as context variable in ELT (#2983)
bugfix(TUP-21164):Context is not recognized as context variable in ELT 
Map components and is not separated with string concat from SQL code
2018-11-23 10:50:14 +08:00
Jane Ding
4854be66a1 fix(TUP-21064)NPE happens when 'save as' routine (#2934)
fix(TUP-21064)NPE happens when 'save as' routine
https://jira.talendforge.org/browse/TUP-21064
2018-11-22 18:51:14 +08:00
Ivan Gonchar
74e5cec24e Revert "Igonchar/tup 20926 (#2914)" (#2986)
This reverts commit fa789f9d67.
2018-11-22 17:38:43 +08:00
kjwang-talend
3952520583 Kjwang/fix tup 20843 wrong output results (#2977)
* TUP-20843 Wrong output results when the name of the jobs in the main
project and the reference are same.

* TUP-20843 Wrong output results when the name of the jobs in the main
project and the reference are same.
https://jira.talendforge.org/browse/TUP-20843

* TUP-20843 Wrong output results when the name of the jobs in the main
project and the reference are same.
https://jira.talendforge.org/browse/TUP-20843

* TUP-20843 Wrong output results when the name of the jobs in the main
project and the reference are same.
https://jira.talendforge.org/browse/TUP-20843

* TUP-20843 Wrong output results when the name of the jobs in the main
project and the reference are same.
https://jira.talendforge.org/browse/TUP-20843
2018-11-22 17:28:02 +08:00
kjwang-talend
3a48cba47c Fix : TUP-21137 Security: jtds-1.3.1-patch.jar ntlmauth loaded from a (#2970)
path variable
https://jira.talendforge.org/browse/TUP-21137
2018-11-22 11:37:27 +08:00
hcyi
e7d04ca6fd fix(TUP-21160):JDBC connection will not commit even if autocommit is set (#2976)
to True.
2018-11-22 11:26:00 +08:00
jiezhang-tlnd
393a72f03c fix(TUP-21148)Can't save the changes of Connections (#2978)
* fix(TUP-21148)Can't save the changes of Connections
https://jira.talendforge.org/browse/TUP-21148

* fix(TUP-21148)Can't save the changes of Connections
2018-11-22 10:44:09 +08:00
Ivan Gonchar
fa789f9d67 Igonchar/tup 20926 (#2914)
* fix(TUP-20926): move metadata retrieval from SchemaActionParameter to SchemaElementParameter

* fix(TUP-20926): implement set schema after update action

* fix(TUP-20926): remove unusued import

* fix(TUP-20926): add unit-tests for SchemaElementParameter

* fix(TUP-20926): add mockito dependency

* fix(TUP-20926): create schema widget only for output schema

* fix(TUP-20926): allow to override SchemaElementParameter.getMetadata()

* fix(TUP-20926): create ListPropertyNode for input schema

* fix(TUP-20926): implement InputSchemaParameter

* fix(TUP-20926): modify SettingVisitor to create InputSchemaParameter for input schemas

* fix(TUP-20926): move InputSchemaCreation from SettingVisitor to Constructor

* fix(TUP-20926): move discover schema name to PropertyDefinitionDecorator.Conenction class

* fix(TUP-20926): extract OutputSchemaParameter

* fix(TUP-20926): move OutputSchema creation from SettingVisitor to OutputSchemaParameter

* fix(TUP-20926): move const to OutputSchemaParameter

* fix(TUP-20926): refactor canAddGuessSchema()

* fix(TUP-20926): fix OutputSchemaParameter.schemaDisplayName()

* fix(TUP-20926): get rid of TACOKIT_INPUT_SCHEMA field type

* fix(TUP-20926): fix according review comments

* Revert "fix(TUP-20926): get rid of TACOKIT_INPUT_SCHEMA field type"

This reverts commit 13cea83260.

* fix(TUP-20926): add Input schema value to Configuration in runtime
2018-11-22 10:36:51 +08:00
zwxue
05e3a2c3a3 fix(TUP-20316):support JDBC for implicit context (#2974) 2018-11-22 09:52:38 +08:00
617 changed files with 19206 additions and 8224 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

@@ -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

@@ -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

@@ -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

@@ -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

@@ -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

@@ -7,6 +7,6 @@
<version>7.2.1-SNAPSHOT</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

@@ -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

@@ -1,267 +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.jtds"
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

@@ -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

@@ -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

@@ -1,446 +1,68 @@
<?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"/>
<import plugin="jaxb-api" 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

@@ -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

@@ -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

@@ -1,313 +1,56 @@
<?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.eclipse.nebula.widgets.nattable.extension.glazedlists.feature" version="0.0.0" match="greaterOrEqual"/>
<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.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.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

@@ -18,6 +18,7 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.talend.commons.ui.gmf.util.DisplayUtils;
import org.talend.core.model.process.AbstractNode;
import org.talend.core.model.process.EConnectionType;
import org.talend.core.model.process.IConnection;
@@ -92,7 +93,7 @@ public class AlfrescoOutputManager {
try {
modelManager.load(); // NB. or when modelManager is created
} catch (AlfrescoOutputException aoex) {
MessageDialog.openError(new Shell(Display.getCurrent(), SWT.APPLICATION_MODAL),
MessageDialog.openError(DisplayUtils.getDefaultShell(false),
Messages.getString("AlfrescoOutputManager.failedLoadModel"), aoex.getMessage()); //$NON-NLS-1$
modelManager.clear();
}

View File

@@ -33,7 +33,6 @@ import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Label;
@@ -42,6 +41,7 @@ import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.talend.commons.ui.gmf.util.DisplayUtils;
import org.talend.commons.ui.runtime.image.ImageUtils.ICON_SIZE;
import org.talend.core.model.components.IComponent;
import org.talend.core.ui.images.CoreImageProvider;
@@ -248,7 +248,7 @@ public class AlfrescoModelDialog extends Dialog {
try {
modelManager.addModel(AlfrescoModelDialog.this.chosenModelFilePath);
} catch (AlfrescoOutputException aoex) {
MessageDialog.openError(new Shell(Display.getCurrent(), SWT.APPLICATION_MODAL), Messages
MessageDialog.openError(DisplayUtils.getDefaultShell(false), Messages
.getString("AlfrescoModelDialog.addModelFailed"), aoex.getMessage()); //$NON-NLS-1$
return;
}
@@ -267,7 +267,7 @@ public class AlfrescoModelDialog extends Dialog {
try {
modelManager.removeModel(selectedItem);
} catch (AlfrescoOutputException aoex) {
MessageDialog.openError(new Shell(Display.getCurrent(), SWT.APPLICATION_MODAL), Messages
MessageDialog.openError(DisplayUtils.getDefaultShell(false), Messages
.getString("AlfrescoModelDialog.removeModelFailed"), aoex.getMessage()); //$NON-NLS-1$
return;
}
@@ -303,14 +303,14 @@ public class AlfrescoModelDialog extends Dialog {
List<String> missingTypeNames = modelManager.getMetadataManager().getMissingTypeNames();
List<String> missingAspectNames = modelManager.getMetadataManager().getMissingAspectNames();
if (!missingTypeNames.isEmpty()) {
MessageDialog.openError(new Shell(Display.getCurrent(), SWT.APPLICATION_MODAL), Messages
MessageDialog.openError(DisplayUtils.getDefaultShell(false), Messages
.getString("AlfrescoModelDialog.missingTypeDefinitions.title"), Messages.getString( //$NON-NLS-1$
"AlfrescoModelDialog.missingTypeDefinitions.msg", missingTypeNames)); //$NON-NLS-1$
}
if (!missingAspectNames.isEmpty()) {
MessageDialog.openError(new Shell(Display.getCurrent(), SWT.APPLICATION_MODAL), Messages
.getString("AlfrescoModelDialog.missingAspectDefinitions.title"), Messages.getString( //$NON-NLS-1$
"AlfrescoModelDialog.missingAspectDefinitions.msg", missingAspectNames)); //$NON-NLS-1$
MessageDialog.openError(DisplayUtils.getDefaultShell(false),
Messages.getString("AlfrescoModelDialog.missingAspectDefinitions.title"), Messages.getString( //$NON-NLS-1$
"AlfrescoModelDialog.missingAspectDefinitions.msg", missingAspectNames)); //$NON-NLS-1$
}
// NB. model is only saved on closing the dialog with OK
}

View File

@@ -36,5 +36,7 @@ Require-Bundle: org.eclipse.ui.ide,
com.ibm.icu,
org.talend.libraries.apache,
org.talend.repository.items.importexport,
org.talend.repository.view.di
org.talend.repository.view.di,
org.talend.commons.runtime,
org.talend.core.runtime
Eclipse-LazyStart: true

View File

@@ -10,7 +10,6 @@ import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
@@ -18,6 +17,7 @@ import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
import org.eclipse.ui.intro.IIntroSite;
import org.eclipse.ui.intro.config.IIntroAction;
import org.talend.commons.ui.gmf.util.DisplayUtils;
import org.talend.commons.ui.runtime.exception.ExceptionHandler;
import org.talend.commons.ui.runtime.image.ECoreImage;
import org.talend.commons.ui.runtime.image.ImageProvider;
@@ -67,7 +67,7 @@ public class CreateDiagramAction extends AContextualAction implements IIntroActi
SimpleBusinessCreationWizard wizard = new SimpleBusinessCreationWizard(getActivePage().getWorkbenchWindow()
.getWorkbench(), getPath());
WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard);
WizardDialog wizardDialog = new WizardDialog(DisplayUtils.getDefaultShell(false), wizard);
wizardDialog.create();
wizardDialog.open();
}

View File

@@ -45,8 +45,8 @@ public class BusinessModelsRepoViewLinker extends AbstractRepositoryEditorInputL
* java.lang.String)
*/
@Override
public boolean isRelation(IEditorInput editorInput, String repoNodeId) {
return super.isRelation(getRealEditorInput(editorInput), repoNodeId);
public boolean isRelation(IEditorInput editorInput, String repoNodeProjectTechLabel, String repoNodeId) {
return super.isRelation(getRealEditorInput(editorInput), repoNodeProjectTechLabel, repoNodeId);
}
private RepositoryEditorInput getRealEditorInput(IEditorInput editorInput) {

View File

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

View File

@@ -336,10 +336,10 @@
String instance_<%=testData%>=null;
<%
if(ProcessUtils.isSpark(process)){
String lineSeparator = (String) java.security.AccessController.doPrivileged(new sun.security.action.GetPropertyAction("line.separator"));
String lineSeparator = "\r\n";
String fileContentEnCodeStr = "";
try {
fileContentEnCodeStr = (new sun.misc.BASE64Encoder()).encode(path.getBytes("UTF-8"));
fileContentEnCodeStr = java.util.Base64.getMimeEncoder().encodeToString(path.getBytes("UTF-8"));
} catch (java.io.UnsupportedEncodingException e) {
e.printStackTrace();
}
@@ -351,7 +351,7 @@
String testDataValue = result.toString();
%>
try {
instance_<%=testData%> = new String((new sun.misc.BASE64Decoder()).decodeBuffer("<%=testDataValue%>"), utf8Charset);
instance_<%=testData%> = new String(java.util.Base64.getMimeDecoder().decode("<%=testDataValue%>"), utf8Charset);
} catch (java.lang.Exception e) {
e.printStackTrace();
}
@@ -506,11 +506,14 @@
if (inContext == null) {
inContext = <%=className%>.class.getClassLoader().getResourceAsStream("config/contexts/" + contextStr + ".properties");
}
if (inContext != null && context != null && context.isEmpty()) {
if (inContext != null) {
//defaultProps is in order to keep the original context value
defaultProps.load(inContext);
if(context != null && context.isEmpty()) {
defaultProps.load(inContext);
context = new ContextProperties(defaultProps);
}
inContext.close();
context = new ContextProperties(defaultProps);
} else if (!isDefaultContext) {
//print info and job continue to run, for case: context_param is not empty.
System.err.println("Could not find the context " + contextStr);
@@ -528,107 +531,128 @@
}
<%
String warningMessageFormat = "Null value will be used for context parameter %s: %s";
for (IContextParameter ctxParam :params)
{
%>
context.setContextType("<%=ctxParam.getName()%>", "<%=ctxParam.getType()%>");
<%
if (ctxParam.getType().equals("id_Password")) {
%>
String pwd_<%=ctxParam.getName()%>_value = context.getProperty("<%=ctxParam.getName()%>");
context.<%=ctxParam.getName()%> = null;
if(pwd_<%=ctxParam.getName()%>_value!=null) {
if(context_param.containsKey("<%=ctxParam.getName()%>")) {//no need to decrypt if it come from program argument or parent job runtime
context.<%=ctxParam.getName()%> = pwd_<%=ctxParam.getName()%>_value;
} else if (!pwd_<%=ctxParam.getName()%>_value.isEmpty()) {
try {
context.<%=ctxParam.getName()%> = routines.system.PasswordEncryptUtil.decryptPassword(pwd_<%=ctxParam.getName()%>_value);
context.put("<%=ctxParam.getName()%>",context.<%=ctxParam.getName()%>);
} catch (java.lang.RuntimeException e) {
//do nothing
}
}
}
<%
continue;
}
String typeToGenerate ="String";
if( !(ctxParam.getType().equals("id_File") || ctxParam.getType().equals("id_Directory") ||ctxParam.getType().equals("id_List Of Value")))
{
typeToGenerate=JavaTypesManager.getTypeToGenerate(ctxParam.getType(),true);
}
if(typeToGenerate.equals("java.util.Date"))
{
final int maxContextInOneMethodToProcess = 100;
int lastMethodNumber = 0;
%>
class ContextProcessing {
private void processContext_0() {
<%
for (int i = 1; i <= params.size(); i++) {
IContextParameter ctxParam = params.get(i-1);
if (i % maxContextInOneMethodToProcess == 0) {
/* close previous method and declare new */
lastMethodNumber++;
%>
}
%>
try{
String context_<%=ctxParam.getName()%>_value = context.getProperty("<%=ctxParam.getName()%>");
if (context_<%=ctxParam.getName()%>_value == null){
context_<%=ctxParam.getName()%>_value = "";
}
int context_<%=ctxParam.getName()%>_pos = context_<%=ctxParam.getName()%>_value.indexOf(";");
String context_<%=ctxParam.getName()%>_pattern = "yyyy-MM-dd HH:mm:ss";
if(context_<%=ctxParam.getName()%>_pos > -1){
context_<%=ctxParam.getName()%>_pattern = context_<%=ctxParam.getName()%>_value.substring(0, context_<%=ctxParam.getName()%>_pos);
context_<%=ctxParam.getName()%>_value = context_<%=ctxParam.getName()%>_value.substring(context_<%=ctxParam.getName()%>_pos + 1);
}
private void processContext_<%=lastMethodNumber%>() {
<%
} //endIf
%>
context.setContextType("<%=ctxParam.getName()%>", "<%=ctxParam.getType()%>");
<%
if (ctxParam.getType().equals("id_Password")) {
%>
String pwd_<%=ctxParam.getName()%>_value = context.getProperty("<%=ctxParam.getName()%>");
context.<%=ctxParam.getName()%> = null;
if(pwd_<%=ctxParam.getName()%>_value!=null) {
if(context_param.containsKey("<%=ctxParam.getName()%>")) {//no need to decrypt if it come from program argument or parent job runtime
context.<%=ctxParam.getName()%> = pwd_<%=ctxParam.getName()%>_value;
} else if (!pwd_<%=ctxParam.getName()%>_value.isEmpty()) {
try {
context.<%=ctxParam.getName()%> = routines.system.PasswordEncryptUtil.decryptPassword(pwd_<%=ctxParam.getName()%>_value);
context.put("<%=ctxParam.getName()%>",context.<%=ctxParam.getName()%>);
} catch (java.lang.RuntimeException e) {
//do nothing
}
}
}
<%
continue;
}
String typeToGenerate ="String";
if( !(ctxParam.getType().equals("id_File") || ctxParam.getType().equals("id_Directory") ||ctxParam.getType().equals("id_List Of Value"))) {
typeToGenerate=JavaTypesManager.getTypeToGenerate(ctxParam.getType(),true);
}
if(typeToGenerate.equals("java.util.Date")) {
%>
try{
String context_<%=ctxParam.getName()%>_value = context.getProperty("<%=ctxParam.getName()%>");
if (context_<%=ctxParam.getName()%>_value == null){
context_<%=ctxParam.getName()%>_value = "";
}
int context_<%=ctxParam.getName()%>_pos = context_<%=ctxParam.getName()%>_value.indexOf(";");
String context_<%=ctxParam.getName()%>_pattern = "yyyy-MM-dd HH:mm:ss";
if(context_<%=ctxParam.getName()%>_pos > -1){
context_<%=ctxParam.getName()%>_pattern = context_<%=ctxParam.getName()%>_value.substring(0, context_<%=ctxParam.getName()%>_pos);
context_<%=ctxParam.getName()%>_value = context_<%=ctxParam.getName()%>_value.substring(context_<%=ctxParam.getName()%>_pos + 1);
}
context.<%=ctxParam.getName()%>=(java.util.Date)(new java.text.SimpleDateFormat(context_<%=ctxParam.getName()%>_pattern).parse(context_<%=ctxParam.getName()%>_value));
context.<%=ctxParam.getName()%>=(java.util.Date)(new java.text.SimpleDateFormat(context_<%=ctxParam.getName()%>_pattern).parse(context_<%=ctxParam.getName()%>_value));
}catch(ParseException e)
{
} catch(ParseException e) {
<%
if (isLog4jEnabled) {
if (isLog4jEnabled) {
%>
log.warn(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
log.warn(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
<%
} else {
} else {
%>
System.err.println(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
System.err.println(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
<%
}
}
%>
context.<%=ctxParam.getName()%>=null;
}
<%
}else if(typeToGenerate.equals("Object")||typeToGenerate.equals("String")||typeToGenerate.equals("java.lang.String") )
{
%>
context.<%=ctxParam.getName()%>=(<%=typeToGenerate%>) context.getProperty("<%=ctxParam.getName()%>");
<%
}else if(typeToGenerate.equals("Character")&&ctxParam.getName()!=null)
{
%>
context.<%=ctxParam.getName()%>= new java.text.StringCharacterIterator(context.getProperty("<%=ctxParam.getName()%>")).first();
<%
} else {
%>
try{
context.<%=ctxParam.getName()%>=routines.system.ParserUtils.parseTo_<%=typeToGenerate%> (context.getProperty("<%=ctxParam.getName()%>"));
}catch(NumberFormatException e){
context.<%=ctxParam.getName()%>=null;
}
<%
if (isLog4jEnabled) {
} else if(typeToGenerate.equals("Object")||typeToGenerate.equals("String")||typeToGenerate.equals("java.lang.String")) {
%>
log.warn(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
context.<%=ctxParam.getName()%>=(<%=typeToGenerate%>) context.getProperty("<%=ctxParam.getName()%>");
<%
} else {
} else if(typeToGenerate.equals("Character")&&ctxParam.getName()!=null) {
%>
System.err.println(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
context.<%=ctxParam.getName()%>= new java.text.StringCharacterIterator(context.getProperty("<%=ctxParam.getName()%>")).first();
<%
}
} else {
%>
try{
context.<%=ctxParam.getName()%>=routines.system.ParserUtils.parseTo_<%=typeToGenerate%> (context.getProperty("<%=ctxParam.getName()%>"));
} catch(NumberFormatException e){
<%
if (isLog4jEnabled) {
%>
log.warn(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
<%
} else {
%>
System.err.println(String.format("<%=warningMessageFormat %>", "<%=ctxParam.getName() %>", e.getMessage()));
<%
}
%>
context.<%=ctxParam.getName()%>=null;
}
<%
}
}
%>
} <%/*close last method*/%>
public void processAllContext() {
<%
for (int i = 0; i <=lastMethodNumber; i++) {
%>
processContext_<%=i %>();
<%
}
%>
context.<%=ctxParam.getName()%>=null;
}
<%
}
}
%>
new ContextProcessing().processAllContext();
} catch (java.io.IOException ie) {
System.err.println("Could not load context "+contextStr);
ie.printStackTrace();
}
// get context value from parent directly
if (parentContextMap != null && !parentContextMap.isEmpty()) {
<% for (IContextParameter ctxParam :params){
@@ -1140,8 +1164,12 @@ if (execStat) {
if(conn_<%=hbaseComponent.getUniqueName()%> != null )
{
<%
if((isCustom && isHadoop2) || (!isCustom && hbaseDistrib.doSupportNewHBaseAPI())) {%>
org.apache.hadoop.hbase.client.HConnection hConnection_<%=hbaseComponent.getUniqueName() %> = org.apache.hadoop.hbase.client.HConnectionManager.getConnection(conn_<%=hbaseComponent.getUniqueName() %>);
if((isCustom && isHadoop2) || (!isCustom && hbaseDistrib.doSupportNewHBaseAPI())) {
if (!hbaseDistrib.doSupportHBase2x()) {%>
org.apache.hadoop.hbase.client.HConnection hConnection_<%=hbaseComponent.getUniqueName() %> = org.apache.hadoop.hbase.client.HConnectionManager.getConnection(conn_<%=hbaseComponent.getUniqueName() %>);
<% } else {%>
org.apache.hadoop.hbase.client.Connection hConnection_<%=hbaseComponent.getUniqueName() %> = org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(conn_<%=hbaseComponent.getUniqueName() %>);
<% }%>
if ((hConnection_<%=hbaseComponent.getUniqueName() %> != null) && (!hConnection_<%=hbaseComponent.getUniqueName() %>.isClosed())) {
hConnection_<%=hbaseComponent.getUniqueName() %>.close();
}

View File

@@ -512,6 +512,8 @@ private class TalendException extends Exception {
if(!(e instanceof TDieException)){
<%
boolean needCatchTalendException = false;
if (process.getNodesOfType("tLogCatcher").size() > 0) {
List<INode> logCatchers = (List<INode>)process.getNodesOfType("tLogCatcher");
for (INode logCatcher : logCatchers) {
@@ -543,6 +545,7 @@ private class TalendException extends Exception {
if (ElementParameterParser.getValue(logCatcher, "__CATCH_JAVA_EXCEPTION__").equals("true")) {
if(logCatcher!=virtualNCatchNode){
// 2) launch logCatcher subProcess
needCatchTalendException = true;
%>
<%=logCatcher.getDesignSubjobStartNode().getUniqueName() %>Process(globalMap);
<%
@@ -555,6 +558,7 @@ private class TalendException extends Exception {
<%
}
if(virtualNCatchNode!=null){
needCatchTalendException = true;
%>
<%=virtualNCatchNode.getDesignSubjobStartNode().getUniqueName() %>Process(globalMap);
<%
@@ -568,31 +572,12 @@ private class TalendException extends Exception {
%>
}
<%
boolean needCatchTalendException = false;
if (process.getNodesOfType("tLogCatcher").size() > 0) {
for(INode node:process.getNodesOfType("tLogCatcher")){
if(ElementParameterParser.getValue(node, "__CATCH_JAVA_EXCEPTION__").equals("true")){
needCatchTalendException = true;
break;
}
}
}
if ((!needCatchTalendException) && (process.getNodesOfType("tAssertCatcher").size() > 0)) {
for(INode node:process.getNodesOfType("tAssertCatcher")){
if(ElementParameterParser.getValue(node, "__CATCH_JAVA_EXCEPTION__").equals("true")){
needCatchTalendException = true;
break;
}
}
}
if(needCatchTalendException) {
if (process.getNodesOfType("tLogCatcher").size() > 0) {
%>
} catch (TalendException e) {
// do nothing
<%
}
//TODO should catch the TalendException in assertcatcher process? but before should not work too as use java reflect, this exception can't catch
%>
} catch (TalendException e) {
// do nothing
<%
}
%>
} catch (Exception e) {

View File

@@ -16,6 +16,7 @@ import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.Platform;
import org.talend.commons.exception.ExceptionHandler;
import org.talend.commons.utils.StringUtils;
/**
@@ -393,7 +394,12 @@ public class JetBean {
}
public String getFullTemplatePath() {
return Platform.getPlugin(getJetPluginRepository()).getDescriptor().getInstallURL().toString() + getTemplateRelativeUri();
try {
return TemplateUtil.getPlatformUrlOfBundle(getJetPluginRepository()) + getTemplateRelativeUri();
} catch (Throwable e) {
ExceptionHandler.process(e);
}
return null;
}
public String getGenerationError() {

View File

@@ -21,7 +21,9 @@ import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.codegen.jet.JETCompiler;
import org.eclipse.emf.codegen.jet.JETException;
import org.eclipse.emf.codegen.jet.JETMark;
import org.eclipse.emf.common.util.URI;
import org.osgi.framework.Bundle;
import org.talend.commons.exception.ExceptionHandler;
/**
* ggu class global comment. Detailled comment
@@ -76,6 +78,24 @@ public class TalendJETCompiler extends JETCompiler {
if (newFileURI != null) {
newAttributes.put(fileKey, newFileURI);
}
try {
String filePath = newAttributes.get(fileKey);
if (filePath != null && start != null && start.getFile() != null) {
URI uri = URI.createURI(filePath);
if (uri.isRelative() && uri.hasRelativePath()) {
String basePath = start.getFile();
String resolvedLocation = "";
int index = basePath.lastIndexOf("/");
if (index != -1) {
resolvedLocation = basePath.substring(0, index + 1);
}
resolvedLocation = resolve(resolvedLocation, uri.toString());
newAttributes.put(fileKey, resolvedLocation);
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
}
} else if (directive.equals("jet")) { //$NON-NLS-1$
String skeletonKey = "skeleton"; //$NON-NLS-1$
String skeletonURI = newAttributes.get(skeletonKey);
@@ -85,28 +105,79 @@ public class TalendJETCompiler extends JETCompiler {
newAttributes.put(skeletonKey, newSkeletonURI);
}
}
try {
String filePath = newAttributes.get(skeletonKey);
if (filePath != null && start != null && start.getFile() != null) {
URI uri = URI.createURI(filePath);
if (uri.isRelative() && uri.hasRelativePath()) {
String basePath = start.getFile();
String resolvedLocation = "";
int index = basePath.lastIndexOf("/");
if (index != -1) {
resolvedLocation = basePath.substring(0, index + 1);
}
resolvedLocation = resolve(resolvedLocation, uri.toString());
newAttributes.put(skeletonKey, resolvedLocation);
}
}
} catch (Exception e) {
ExceptionHandler.process(e);
}
}
super.handleDirective(directive, start, stop, newAttributes);
}
@SuppressWarnings("deprecation")
private String checkAndReplace(String fileURI) {
if (fileURI != null) {
Matcher matcher = PLUGIN_VAR_PATTERN.matcher(fileURI);
if (matcher.find()) {
// get the plugin name from fileURI
String refPluginName = matcher.group(1);
// retrieve the plugin URI by pluginName.
Bundle refBundle = Platform.getBundle(refPluginName);
if (refBundle != null) {
String realURI = Platform.getPlugin(refPluginName).getDescriptor().getInstallURL().toString();
// replace the old fileURI to new one by pluginURI
String newFileURI = fileURI.replaceFirst(PLUGIN_VAR_PATTERN.pattern(), realURI);
return newFileURI;
try {
if (fileURI != null) {
Matcher matcher = PLUGIN_VAR_PATTERN.matcher(fileURI);
if (matcher.find()) {
// get the plugin name from fileURI
String refPluginName = matcher.group(1);
// retrieve the plugin URI by pluginName.
Bundle refBundle = Platform.getBundle(refPluginName);
if (refBundle != null) {
String realURI = TemplateUtil.getPlatformUrlOfBundle(refPluginName);
// replace the old fileURI to new one by pluginURI
String newFileURI = fileURI.replaceFirst(PLUGIN_VAR_PATTERN.pattern(), realURI);
return newFileURI;
}
}
}
} catch (Throwable e) {
ExceptionHandler.process(e);
}
return null; // not replace
}
/**
* {@link JETCompiler#resolve(String, String)} has bug of resolving relative path when upgrading eclipse4.10, try to
* override it
*
* @param base
* @param relativePath
* @return
*/
private static String resolve(String base, String relativePath) {
while (relativePath.startsWith("./")) {
relativePath = relativePath.substring(2);
}
while (relativePath.startsWith("../")) {
int index = base.lastIndexOf('/', base.length() - 2);
if (index == -1) {
base = "";
relativePath = relativePath.substring(3);
break;
} else {
base = base.substring(0, index) + "/";
relativePath = relativePath.substring(3);
}
}
return base + relativePath;
}
}

View File

@@ -12,6 +12,9 @@
// ============================================================================
package org.talend.designer.codegen.config;
import org.eclipse.core.runtime.Platform;
import org.osgi.framework.Bundle;
/**
* CodeGenerator Templates Ressources Utils.
*
@@ -150,5 +153,18 @@ public class TemplateUtil {
public EInternalTemplate getType() {
return this.template;
}
/**
* Replacement of Platform.getPlugin(bundleName).getDescriptor().getInstallURL().toString()
*
* @param bundleName
* @return
*/
public static String getPlatformUrlOfBundle(String bundleName) {
Bundle bundle = Platform.getBundle(bundleName);
if (bundle == null) {
return null;
}
return "platform:/plugin/" + bundle.getSymbolicName() + "_" + bundle.getVersion().toString() + "/";
}
}

View File

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

View File

@@ -32,7 +32,6 @@ import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorReference;
import org.eclipse.ui.IWorkbenchPage;
@@ -347,7 +346,8 @@ public class DownloadComponenentsAction extends Action implements IIntroAction {
@Override
public void run() {
MessageDialog.openError(new Shell(), Messages.getString("DownloadComponenentsAction_failureTitle"), //$NON-NLS-1$
MessageDialog.openError(DisplayUtils.getDefaultShell(false),
Messages.getString("DownloadComponenentsAction_failureTitle"), //$NON-NLS-1$
Messages.getString("DownloadComponenentsAction_failureMessage", extension.getLabel())); //$NON-NLS-1$
}
});

View File

@@ -25,7 +25,6 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import jdk.internal.org.objectweb.asm.TypeReference;
import org.apache.axis.components.net.TransportClientProperties;
import org.apache.axis.components.net.TransportClientPropertiesFactory;

View File

@@ -0,0 +1,105 @@
<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>TalendSAX</artifactId>
<version>1.0.1-20190326</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<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>
<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

@@ -43,14 +43,20 @@ public class ComplexSAXLooper implements ISAXLooper {
// node paths special which tab will be read as the row value
private String[] nodePaths;
private final String LOAD_EXTERNAL_DTD = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
private final String EXTERNAL_GENERAL_ENTITIES = "http://xml.org/sax/features/external-general-entities";
private final String EXTERNAL_PARAMETER_ENTITIES = "http://xml.org/sax/features/external-parameter-entities";
// add to support node.asXML()
private boolean[] asXMLs;
private LoopEntry entry;
private SAXLoopCompositeHandler result;
private boolean ignoreDTD=false;
private boolean ignoreDTD = false;
/**
* DOC xzhang SAXLooper constructor comment.
@@ -140,21 +146,14 @@ public class ComplexSAXLooper implements ISAXLooper {
Reader reader = null;
try {
DefaultHandler hd = null;
SAXParser saxParser = null;
if(!ignoreDTD) { //orginal code
saxParser = SAXParserFactory.newInstance().newSAXParser();
} else {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
saxParser = spf.newSAXParser();
}
SAXParser saxParser = createSaxParser();
if (rootPath == null || rootPath.equals("")) {
hd = newHandler();
} else {
hd = newHandler2();
}
saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", hd);
reader = new UnicodeReader(new java.io.FileInputStream(fileURL),this.charset);
reader = new UnicodeReader(new java.io.FileInputStream(fileURL), this.charset);
org.xml.sax.InputSource inSource = new org.xml.sax.InputSource(reader);
saxParser.parse(inSource, hd);
@@ -165,10 +164,10 @@ public class ComplexSAXLooper implements ISAXLooper {
} catch (IOException e) {
e.printStackTrace();
} finally {
if(reader!=null) {
if (reader != null) {
try {
reader.close();
} catch(IOException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
@@ -185,7 +184,7 @@ public class ComplexSAXLooper implements ISAXLooper {
Reader reader = null;
try {
DefaultHandler hd = null;
SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
SAXParser saxParser = createSaxParser();
if (rootPath == null || rootPath.equals("")) {
hd = newHandler();
} else {
@@ -193,7 +192,7 @@ public class ComplexSAXLooper implements ISAXLooper {
}
saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", hd);
// routines.system.UnicodeReader.java is used to ignore the BOM of the source file.
reader = new UnicodeReader(is,this.charset);
reader = new UnicodeReader(is, this.charset);
org.xml.sax.InputSource inSource = new org.xml.sax.InputSource(reader);
saxParser.parse(inSource, hd);
@@ -204,16 +203,34 @@ public class ComplexSAXLooper implements ISAXLooper {
} catch (IOException e) {
e.printStackTrace();
} finally {
if(reader!=null) {
if (reader != null) {
try {
reader.close();
} catch(IOException e) {
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* Create Sax parser and set required security features to it
*
* @return sax parser with required security features set
* @throws ParserConfigurationException
* @throws SAXException
*/
private SAXParser createSaxParser() throws ParserConfigurationException, SAXException {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
if (ignoreDTD) {
spf.setFeature(LOAD_EXTERNAL_DTD, false);
spf.setFeature(EXTERNAL_GENERAL_ENTITIES, false);
spf.setFeature(EXTERNAL_PARAMETER_ENTITIES, false);
}
return spf.newSAXParser();
}
/**
* Get result iterator. This must be call after the parse method.
*
@@ -292,7 +309,7 @@ public class ComplexSAXLooper implements ISAXLooper {
String column = nodePaths[m];
String resultCol = this.loopPath;
boolean isAsXML = this.asXMLs[m];
boolean isDot = false;//fix for TDI-19435
boolean isDot = false;// fix for TDI-19435
String tmpLoopPath = null;
String[] splits = column.split("/");
for (String tmp : splits) {
@@ -451,7 +468,7 @@ public class ComplexSAXLooper implements ISAXLooper {
tmpentry.setOriginalLoopPath(this.arrOrigLoopPath[i]);
// =======================bug7632 end=============================
}// for(int i=0;i<length;i++)
} // for(int i=0;i<length;i++)
}
@@ -485,12 +502,13 @@ public class ComplexSAXLooper implements ISAXLooper {
long timeStart = System.currentTimeMillis();
String file = "./src/org/talend/xml/sax/in.xml";
String[] query = new String[] { "cust-vendor-num", "cust-vendor-num" + "/@xsi:nil", "cust", "cust" + "/@xsi:nil" };
String[] query =
new String[] { "cust-vendor-num", "cust-vendor-num" + "/@xsi:nil", "cust", "cust" + "/@xsi:nil" };
boolean[] asXMLs = new boolean[] { true, false, true, false };
String loopPath = "/orderdata/order/header";
ComplexSAXLooper looper = new ComplexSAXLooper(loopPath, query, asXMLs);
looper.parse(file,"UTF-8");
looper.parse(file, "UTF-8");
java.util.Iterator<java.util.Map<String, String>> iter = looper.iterator();
@@ -518,9 +536,9 @@ public class ComplexSAXLooper implements ISAXLooper {
}
}
public void setIgnoreDTD(boolean ignoreDTD) {
this.ignoreDTD=ignoreDTD;
}
public void setIgnoreDTD(boolean ignoreDTD) {
this.ignoreDTD = ignoreDTD;
}
}

View File

@@ -20,6 +20,7 @@ import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
@@ -28,38 +29,45 @@ import org.talend.xml.sax.commons.ISAXLooper;
import org.talend.xml.sax.io.UnicodeReader;
import org.talend.xml.sax.simpleparser.model.XMLNode;
import org.talend.xml.sax.simpleparser.model.XMLNodes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* DOC Administrator class global comment. Detailled comment
*/
public class SimpleSAXLooper implements ISAXLooper,Callable {
public class SimpleSAXLooper implements ISAXLooper, Callable {
private XMLNodes nodes = new XMLNodes();
private DataBufferCache bcache;
private DataBufferCache2 multiCache;
private Thread task;
private FutureTask futureTask;
private boolean ignoreDTD = false;
SimpleSAXLoopHandler hd = null;
private String[] arrOrigLoopPath;
private String rootPath;
private String[] arrLoopPath;
private final String LOAD_EXTERNAL_DTD = "http://apache.org/xml/features/nonvalidating/load-external-dtd";
private final String EXTERNAL_GENERAL_ENTITIES = "http://xml.org/sax/features/external-general-entities";
private final String EXTERNAL_PARAMETER_ENTITIES = "http://xml.org/sax/features/external-parameter-entities";
private List<XMLNodes> nodesList = new ArrayList<XMLNodes>();
public SimpleSAXLooper(String loopPath, String[] nodePaths, boolean[] asXMLs) {
futureTask = new FutureTask(this);
task = new Thread(futureTask);
futureTask = new FutureTask(this);
task = new Thread(futureTask);
for (int i = 0; i < nodePaths.length; i++) {
nodes.addNode(new XMLNode(loopPath, nodePaths[i], null, asXMLs[i]));
}
@@ -69,7 +77,7 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
public SimpleSAXLooper(String rootPath, String[] arrLoopPath, String[][] arrNodePaths) {
futureTask = new FutureTask(this);
task = new Thread(futureTask);
this.arrOrigLoopPath = arrLoopPath;
String tmpRootPath = rootPath;
@@ -80,19 +88,19 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
this.rootPath = tmpRootPath;
this.arrLoopPath = getLoopPaths(arrLoopPath);
for(int j = 0;j<arrNodePaths.length;j++) {
for (int j = 0; j < arrNodePaths.length; j++) {
String[] nodePaths = arrNodePaths[j];
XMLNodes ns = new XMLNodes();
for (int i = 0; i < nodePaths.length; i++) {
ns.addNode(new XMLNode(this.arrOrigLoopPath[j], this.arrLoopPath[j],nodePaths[i], null));
ns.addNode(new XMLNode(this.arrOrigLoopPath[j], this.arrLoopPath[j], nodePaths[i], null));
}
nodesList.add(ns);
}
initLoopEntries();
}
private String[] getLoopPaths(String[] arrLoops) {
String[] loopPaths = new String[arrLoops.length];
@@ -115,14 +123,16 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
return loopPaths;
}
/**
* handle the exception in task.
* FutureTask.get() is a block method waiting for the Task over and it can throw the exception in Task(Callable,Thread,Runnable)
* FutureTask.get() is a block method waiting for the Task over and it can throw the exception in
* Task(Callable,Thread,Runnable)
*
* @throws Exception
*/
public void handleException() throws Exception {
futureTask.get();
futureTask.get();
}
private void initLoopEntry() {
@@ -149,11 +159,11 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
}
private void initLoopEntries() {
multiCache = DataBufferCache2.getInstance();
for(XMLNodes ns : nodesList) {
for (XMLNodes ns : nodesList) {
for (XMLNode node : ns.getNodes().values()) {
String column = node.originPath;
String resultCol = node.loopPath;
@@ -168,10 +178,10 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
resultCol += "/" + tmp;
}
}
node.nodePath = resultCol;
}
}
}
@@ -199,59 +209,60 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
this.charset = charset;
task.start();
}
public Object call() throws Exception {
Reader reader = null;
try {
DefaultHandler handler = null;
if(nodesList.size() > 0) {
SAXLoopCompositeHandler chd = new SAXLoopCompositeHandler();
for(int i=0;i<nodesList.size();i++) {
try {
DefaultHandler handler = null;
if (nodesList.size() > 0) {
SAXLoopCompositeHandler chd = new SAXLoopCompositeHandler();
for (int i = 0; i < nodesList.size(); i++) {
XMLNodes ns = nodesList.get(i);
chd.register(new SimpleSAXLoopHandler(ns, multiCache));
}
handler = chd;
} else {
hd = new SimpleSAXLoopHandler(nodes, bcache);
handler = hd;
}
SAXParser saxParser = null;
if(!ignoreDTD) { //orginal code
saxParser = SAXParserFactory.newInstance().newSAXParser();
} else {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
saxParser = spf.newSAXParser();
hd = new SimpleSAXLoopHandler(nodes, bcache);
handler = hd;
}
SAXParser saxParser = null;
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
if (ignoreDTD) { // orginal code
spf.setFeature(LOAD_EXTERNAL_DTD, false);
spf.setFeature(EXTERNAL_GENERAL_ENTITIES, false);
spf.setFeature(EXTERNAL_PARAMETER_ENTITIES, false);
}
saxParser = spf.newSAXParser();
saxParser.setProperty("http://xml.org/sax/properties/lexical-handler", handler);
if (fileURL != null) {
// routines.system.UnicodeReader.java is used to ignore the BOM of the source file.
reader = new UnicodeReader(new java.io.FileInputStream(fileURL),this.charset);
// routines.system.UnicodeReader.java is used to ignore the BOM of the source file.
reader = new UnicodeReader(new java.io.FileInputStream(fileURL), this.charset);
org.xml.sax.InputSource inSource = new org.xml.sax.InputSource(reader);
saxParser.parse(inSource, handler);
} else {
reader = new UnicodeReader(is,this.charset);
reader = new UnicodeReader(is, this.charset);
org.xml.sax.InputSource inSource = new org.xml.sax.InputSource(reader);
saxParser.parse(inSource, handler);
}
} finally {
try {
if(reader!=null) {
if (reader != null) {
reader.close();
}
} finally {
if(multiCache!=null) {
if (multiCache != null) {
multiCache.notifyErrorOccurred();
}
if(bcache!=null) {
if (bcache != null) {
bcache.notifyErrorOccurred();
}
}
}
return null;
}
return null;
}
public static void main(String[] args) {
try {
@@ -263,7 +274,8 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
String file = "C:/Documents and Settings/Administrator/桌é<C592>¢/in.xml";
// String file = "D:/test/outMain.xml";
String[] query = new String[] { "cust-vendor-num", "cust-vendor-num" + "/@xsi:nil", "cust", "cust" + "/@xsi:nil" };
String[] query =
new String[] { "cust-vendor-num", "cust-vendor-num" + "/@xsi:nil", "cust", "cust" + "/@xsi:nil" };
boolean[] asXMLs = new boolean[] { false, false, false, false };
String loopPath = "/orderdata/order/header";
@@ -310,14 +322,14 @@ public class SimpleSAXLooper implements ISAXLooper,Callable {
return new SimpleSAXMultiLoopIterator(multiCache);
}
public void setIgnoreDTD(boolean ignoreDTD) {
this.ignoreDTD=ignoreDTD;
}
public void setIgnoreDTD(boolean ignoreDTD) {
this.ignoreDTD = ignoreDTD;
}
public void stopRead() {
if(hd != null) {
if (hd != null) {
hd.stopRead();
}
}

View File

@@ -1,7 +1,7 @@
<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>checkArchive-1.1-20171121</artifactId>
<artifactId>checkArchive-1.1-20181130</artifactId>
<version>6.0.0</version>
<name>checkArchive</name>
<description>Dependence for tFileArchive and tFileUnAchive</description>

View File

@@ -5,10 +5,6 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
@@ -17,7 +13,10 @@ import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
import org.apache.commons.compress.archivers.ArchiveEntry;
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream;
import org.apache.commons.compress.archivers.zip.ZipFile;
// import javax.crypto.Cipher;
@@ -36,8 +35,6 @@ public class IntegrityUtil {
zipFile = new ZipFile(file);
return true;
} catch (ZipException e) {
return false;
} catch (IOException e) {
return false;
} finally {
@@ -58,7 +55,6 @@ public class IntegrityUtil {
try {
zipFile = new ZipFile(file);
} catch (ZipException e) {
} catch (IOException e) {
} finally {
try {
@@ -72,27 +68,6 @@ public class IntegrityUtil {
}
}
/**
* Check the zip entry is valid
*
* @param input
* @return
*/
public static boolean isZipEntryValid(final ZipInputStream input) {
try {
ZipEntry entry = input.getNextEntry();
return true;
} catch (ZipException e) {
// TODO Auto-generated catch block
return false;
} catch (IOException e) {
return false;
} catch (Exception e) {
return false;
}
}
/**
* To check if the encrpted zip file is corrupted or not
*
@@ -101,18 +76,15 @@ public class IntegrityUtil {
* @return
*/
public static boolean isEncryptedZipValid(final File file, String password) {
ZipInputStream input = null;
ZipArchiveInputStream input = null;
InputStream target = null;
try {
target = new FileInputStream(file);
target = new CipherInputStream(target, createCipher(Cipher.DECRYPT_MODE, password));
input = new ZipInputStream(target);
ZipEntry entry = input.getNextEntry();
input = new ZipArchiveInputStream(target);
ArchiveEntry entry = input.getNextEntry();
return true;
} catch (ZipException e) {
// TODO Auto-generated catch block
return false;
} catch (IOException e) {
return false;
} catch (Exception e) {

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

@@ -1,126 +0,0 @@
package org.talend.mq.headers.rfh2;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Rfh2AreaParser {
private static class Property {
public String name;
public StringBuffer value = new StringBuffer();
public String dataType;
public boolean isNull;
}
private static class SaxHandler extends DefaultHandler {
private RFH2Area area;
private Property currentProperty;
public RFH2Area getArea() {
return area;
}
public void startElement(String uri, String localName, String name,
Attributes attributes) throws SAXException {
if(area == null) {
// root element
if(name.equals("jms")) {
area = new JmsArea();
} else if(name.equals("mcd")) {
area = new McdArea();
} else {
area = new UsrArea(name);
}
} else {
if(currentProperty == null) {
currentProperty = new Property();
currentProperty.name = name;
if("true".equals(attributes.getValue("xsi:nil"))) {
currentProperty.isNull = true;
}
currentProperty.dataType = attributes.getValue("dt");
}
}
}
public void characters(char[] ch, int start, int length)
throws SAXException {
if(currentProperty != null) {
// TODO use start and length
for(int i = start; i<start+length; i++) {
currentProperty.value.append(ch[i]);
}
}
}
public void endElement(String uri, String localName, String name)
throws SAXException {
if(currentProperty != null) {
String valueAsString = currentProperty.value.toString();
Object value;
if(currentProperty.isNull) {
value = null;
} else if(currentProperty.dataType == null) {
// String
value = valueAsString;
} else if("i4".equals(currentProperty.dataType)) {
value = Integer.valueOf(valueAsString);
} else if("i8".equals(currentProperty.dataType)) {
value = Long.valueOf(valueAsString);
} else if("i2".equals(currentProperty.dataType)) {
value = Short.valueOf(valueAsString);
} else if("i1".equals(currentProperty.dataType)) {
value = Byte.valueOf(valueAsString);
} else if("boolean".equals(currentProperty.dataType)) {
if("1".equals(valueAsString)) {
value = Boolean.TRUE;
} else {
value = Boolean.FALSE;
}
} else if("r4".equals(currentProperty.dataType)) {
value = Float.valueOf(valueAsString);
} else if("r8".equals(currentProperty.dataType)) {
value = Double.valueOf(valueAsString);
} else {
throw new RuntimeException("Unknown data type: " + currentProperty.dataType);
}
area.setProperty(currentProperty.name, value);
currentProperty = null;
}
}
}
public RFH2Area parse(String stringToParse) {
SAXParser parser;
try {
parser = SAXParserFactory.newInstance().newSAXParser();
} catch (Exception e) {
throw new RuntimeException("Failed to create XML parser, can not parse RFH2 areas", e);
}
SaxHandler handler = new SaxHandler();
try {
parser.parse(new InputSource(new StringReader(stringToParse)), handler);
} catch (SAXException e) {
throw new RuntimeException("Invalid RFH2 header", e);
} catch (IOException e) {
throw new RuntimeException("Invalid RFH2 header", e);
}
return handler.getArea();
}
}

View File

@@ -0,0 +1,140 @@
<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</groupId>
<artifactId>talendMQRFH2</artifactId>
<version>1.0.1-20190206</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<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>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq</artifactId>
<version>8.0.0.9</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>8.0.0.9</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>8.0.0.9</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>jnp-client</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>websphere-connector-1_5</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.talend.libraries</groupId>
<artifactId>trove</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</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>
</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,134 @@
package org.talend.mq.headers.rfh2;
import java.io.IOException;
import java.io.StringReader;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Rfh2AreaParser {
private final String DISALLOW_DOCTYPE_DECL = "http://apache.org/xml/features/disallow-doctype-decl";
private static class Property {
public String name;
public StringBuffer value = new StringBuffer();
public String dataType;
public boolean isNull;
}
private static class SaxHandler extends DefaultHandler {
private RFH2Area area;
private Property currentProperty;
public RFH2Area getArea() {
return area;
}
public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
if (area == null) {
// root element
if (name.equals("jms")) {
area = new JmsArea();
} else if (name.equals("mcd")) {
area = new McdArea();
} else {
area = new UsrArea(name);
}
} else {
if (currentProperty == null) {
currentProperty = new Property();
currentProperty.name = name;
if ("true".equals(attributes.getValue("xsi:nil"))) {
currentProperty.isNull = true;
}
currentProperty.dataType = attributes.getValue("dt");
}
}
}
public void characters(char[] ch, int start, int length) throws SAXException {
if (currentProperty != null) {
// TODO use start and length
for (int i = start; i < start + length; i++) {
currentProperty.value.append(ch[i]);
}
}
}
public void endElement(String uri, String localName, String name) throws SAXException {
if (currentProperty != null) {
String valueAsString = currentProperty.value.toString();
Object value;
if (currentProperty.isNull) {
value = null;
} else if (currentProperty.dataType == null) {
// String
value = valueAsString;
} else if ("i4".equals(currentProperty.dataType)) {
value = Integer.valueOf(valueAsString);
} else if ("i8".equals(currentProperty.dataType)) {
value = Long.valueOf(valueAsString);
} else if ("i2".equals(currentProperty.dataType)) {
value = Short.valueOf(valueAsString);
} else if ("i1".equals(currentProperty.dataType)) {
value = Byte.valueOf(valueAsString);
} else if ("boolean".equals(currentProperty.dataType)) {
if ("1".equals(valueAsString)) {
value = Boolean.TRUE;
} else {
value = Boolean.FALSE;
}
} else if ("r4".equals(currentProperty.dataType)) {
value = Float.valueOf(valueAsString);
} else if ("r8".equals(currentProperty.dataType)) {
value = Double.valueOf(valueAsString);
} else {
throw new RuntimeException("Unknown data type: " + currentProperty.dataType);
}
area.setProperty(currentProperty.name, value);
currentProperty = null;
}
}
}
public RFH2Area parse(String stringToParse) {
SAXParser parser;
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(javax.xml.XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
spf.setFeature(DISALLOW_DOCTYPE_DECL, true);
parser = spf.newSAXParser();
} catch (Exception e) {
throw new RuntimeException("Failed to create XML parser, can not parse RFH2 areas", e);
}
SaxHandler handler = new SaxHandler();
try {
parser.parse(new InputSource(new StringReader(stringToParse)), handler);
} catch (SAXException e) {
throw new RuntimeException("Invalid RFH2 header", e);
} catch (IOException e) {
throw new RuntimeException("Invalid RFH2 header", e);
}
return handler.getArea();
}
}

View File

@@ -1,11 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="lib" path="lib/commons-logging-1.1.1.jar"/>
<classpathentry kind="lib" path="lib/httpclient-4.0.1.jar"/>
<classpathentry kind="lib" path="lib/httpcore-4.0.1.jar"/>
<classpathentry kind="lib" path="lib/httpmime-4.0.1.jar"/>
<classpathentry kind="lib" path="lib/javacsv-2.0.jar"/>
<classpathentry combineaccessrules="false" kind="src" path="/org.talend.libraries.csv"/>
<classpathentry kind="output" path="bin"/>
</classpath>

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

@@ -4,7 +4,11 @@
<groupId>org.talend</groupId>
<artifactId>talend-httputil</artifactId>
<name>talend-httputil</name>
<version>1.0.1</version>
<version>1.0.3</version>
<properties>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
</properties>
<dependencies>
<dependency>
@@ -16,7 +20,7 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
<version>2.9.8</version>
</dependency>
<dependency>
@@ -34,6 +38,20 @@
</dependency>
</dependencies>
<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>
@@ -53,13 +71,5 @@
<directory>src/main/java</directory>
</resource>
</resources>
<!--
<testResources>
<testResource>
<directory>src/test/java</directory>
</testResource>
</testResources>
-->
</build>
</project>

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-20190204</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 = TrustManagerFactory.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));
}
}

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