Compare commits

...

74 Commits

Author SHA1 Message Date
firefryy
4d22857994 fix(TBD-8343): NoSuchMethodError when Having tGSConnection and tS3Connection Components Within one Job
update import
2019-04-08 14:10:19 +02: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
261 changed files with 10800 additions and 2541 deletions

View File

@@ -5,12 +5,12 @@
<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.nattable.extension.glazedlists" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.eclipse.nebula.widgets.tablecombo" version="0.0.0" match="greaterOrEqual"/>
<import plugin="org.w3c.css.sac" version="0.0.0" match="greaterOrEqual"/>
</requires>
@@ -44,7 +44,6 @@
<plugin id="org.talend.libraries.jxplorer" download-size="0" install-size="0" version="0.0.0"/>
<plugin download-size="0" install-size="0" version="0.0.0" unpack="false" id="org.talend.libraries.mdm"/>
<plugin id="org.talend.libraries.mondrian" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.nattable" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.netsuite" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.palo" download-size="0" install-size="0" version="0.0.0"/>
<plugin id="org.talend.libraries.persist.lookup" download-size="0" install-size="0" version="0.0.0" unpack="false"/>

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

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

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

@@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.talend.libraries</groupId>
<artifactId>commons-net-ftps-proxy</artifactId>
<version>3.6.1-talend</version>
<version>3.6.1-talend-20190128</version>
<name>commons-net-talend</name>

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

@@ -4,7 +4,7 @@
<groupId>org.talend</groupId>
<artifactId>talend-httputil</artifactId>
<name>talend-httputil</name>
<version>1.0.2</version>
<version>1.0.3</version>
<properties>
<talend.nexus.url>https://artifacts-oss.talend.com</talend.nexus.url>
@@ -20,7 +20,7 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
<version>2.9.8</version>
</dependency>
<dependency>

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));
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,55 @@
package org.talend.webservice.mapper.converter;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.converters.ByteArrayConverter;
public class ConvertTool {
static byte byteArray[] = new byte[0];
private static final Map<Class, Converter> converters;
static {
converters = new HashMap<Class, Converter>();
converters.put(XMLGregorianCalendar.class, new XMLGregorianCalendarConverter());
converters.put(byteArray.getClass(), new ByteArrayConverter());
converters.put(List.class, new ListConverter());
}
public static Object convert(Object value, Class clazz) {
Converter converter = converters.get(clazz);
if (converter != null) {
return converter.convert(clazz, value);
}
return ConvertUtils.convert(ConvertUtils.convert(value), clazz);
}
private static XMLGregorianCalendar DateConverter(Object value, Class clazz) {
if (value instanceof XMLGregorianCalendar) {
return (XMLGregorianCalendar) value;
} else if (value instanceof Date) {
try {
GregorianCalendar c = new GregorianCalendar();
c.setTime((Date) value);
XMLGregorianCalendar date = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
return date;
} catch (javax.xml.datatype.DatatypeConfigurationException ex) {
ex.printStackTrace();
}
} else {
throw new ConversionException("Should be javax.xml.datatype.XMLGregorianCalendar type or java.util.Date type");
}
return null;
}
}

View File

@@ -0,0 +1,22 @@
package org.talend.webservice.mapper.converter;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.Converter;
public class ListConverter implements Converter {
public Object convert(Class type, Object value) {
if (value == null) {
return new ArrayList();
}
if (value instanceof List) {
return value;
} else {
List v = new ArrayList();
v.add(value);
return v;
}
}
}

View File

@@ -0,0 +1,36 @@
package org.talend.webservice.mapper.converter;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.Converter;
public class XMLGregorianCalendarConverter implements Converter {
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
if (value instanceof XMLGregorianCalendar) {
return (value);
} else if (value instanceof Date) {
try {
GregorianCalendar c = new GregorianCalendar();
c.setTime((Date) value);
XMLGregorianCalendar date = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);
return date;
} catch (javax.xml.datatype.DatatypeConfigurationException ex) {
ex.printStackTrace();
}
} else {
throw new ConversionException("Should be javax.xml.datatype.XMLGregorianCalendar type or java.util.Date type");
}
return null;
}
}

View File

@@ -0,0 +1,8 @@
org.talend.ws.exception.IllegalPropertyAccessException=Unable to access property {0} which is not accessible for type {1}
org.talend.ws.exception.NoSuchPropertyException=Property {0} does not exist for type {1}
org.talend.ws.exception.Instantiation=Unable to instantiate class of type {0}
org.talend.ws.exception.InvocationTargetPropertyAccessor=A property accessor has thrown an exception : property {0} of class {1}
org.talend.ws.exception.illegalAccessValueOf=Unable to call method valueOf for enum type {0}
org.talend.ws.exception.Unknown=An unknown exception has been thrown
org.talend.ws.exception.InvalidEnumValueException=Value {0} is not valid for enum {1}
org.talend.ws.exception.InvalidParameterAnyType=You must specify a map like this for anyTypes : {anyType: value, anyType_type: qname} pour les anyType

View File

@@ -0,0 +1,7 @@
org.talend.ws.exception.IllegalPropertyAccessException=\u0391\u03B4\u03C5\u03BD\u03B1\u03BC\u03AF\u03B1 \u03C0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2 \u03C3\u03C4\u03B7\u03BD \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 {0} \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C3\u03B2\u03AC\u03C3\u03B9\u03BC\u03B7 \u03B3\u03B9\u03B1 \u03C4\u03CD\u03C0\u03BF {1}
org.talend.ws.exception.NoSuchPropertyException=\u0397 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 {0} \u03B4\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03C4\u03CD\u03C0\u03BF {1}
org.talend.ws.exception.Instantiation=\u0391\u03B4\u03C5\u03BD\u03B1\u03BC\u03AF\u03B1 \u03BD\u03B1 \u03B4\u03BF\u03B8\u03B5\u03AF \u03C5\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C3\u03B5 \u03BA\u03BB\u03AC\u03C3\u03B7 \u03C4\u03CD\u03C0\u03BF\u03C5 {0}
org.talend.ws.exception.illegalAccessValueOf=\u0391\u03B4\u03C5\u03BD\u03B1\u03BC\u03AF\u03B1 \u03BA\u03BB\u03AE\u03C3\u03B7\u03C2 \u03BC\u03B5\u03B8\u03CC\u03B4\u03BF\u03C5 valueOf \u03B3\u03B9\u03B1 \u03C4\u03CD\u03C0\u03BF enum {0}
org.talend.ws.exception.Unknown=\u039C\u03B9\u03B1 \u03AC\u03B3\u03BD\u03C9\u03C3\u03C4\u03B7 \u03B5\u03BE\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7 \u03C0\u03C1\u03BF\u03AD\u03BA\u03C5\u03C8\u03B5
org.talend.ws.exception.InvalidEnumValueException=\u0397 \u03C4\u03B9\u03BC\u03AE {0} \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B3\u03B9\u03B1 enum {1}
org.talend.ws.exception.InvalidParameterAnyType=\u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B4\u03B9\u03BF\u03C1\u03AF\u03C3\u03B5\u03C4\u03B5 \u03AD\u03BD\u03B1\u03BD \u03C7\u03AC\u03C1\u03C4\u03B7 \u03C3\u03B1\u03BD \u03B1\u03C5\u03C4\u03CC\u03BD \u03B3\u03B9\u03B1 anyTypes : {anyType: value, anyType_type: qname}

View File

@@ -0,0 +1,8 @@
org.talend.ws.exception.IllegalPropertyAccessException=Unable to access property {0} which is not accessible for type {1}
org.talend.ws.exception.NoSuchPropertyException=Property {0} does not exist for type {1}
org.talend.ws.exception.Instantiation=Unable to instantiate class of type {0}
org.talend.ws.exception.InvocationTargetPropertyAccessor=A property accessor has thrown an exception : property {0} of class {1}
org.talend.ws.exception.illegalAccessValueOf=Unable to call method valueOf for enum type {0}
org.talend.ws.exception.Unknown=An unknown exception has been thrown
org.talend.ws.exception.InvalidEnumValueException=Value {0} is not valid for enum {1}
org.talend.ws.exception.InvalidParameterAnyType=You must specify a map like this for anyTypes : {anyType: value, anyType_type: qname} pour les anyType

View File

@@ -0,0 +1,6 @@
org.talend.ws.exception.IllegalPropertyAccessException=Impossible d'acc\u00e9der \u00e0 la propri\u00e9t\u00e9 {0} qui est inaccessible pour le type {1}
org.talend.ws.exception.NoSuchPropertyException=La propri\u00e9t\u00e9 {0} n'existe pas pour le type {1}
org.talend.ws.exception.Instantiation=Impossible d'instancier la classe de type {0}
org.talend.ws.exception.illegalAccessValueOf=Impossible d'appeler une m\u00e9thode valueOf pour le type enum {0}
org.talend.ws.exception.Unknown=Une exception inconnue a \u00e9t\u00e9 rencontr\u00e9e
org.talend.ws.exception.InvalidEnumValueException=La valeur {0} n'est pas valide pour enum {1}

View File

@@ -0,0 +1,8 @@
org.talend.ws.exception.IllegalPropertyAccessException=\u30BF\u30A4\u30D7 {1} \u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u306A\u3044\u30D7\u30ED\u30D1\u30C6\u30A3 {0} \u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
org.talend.ws.exception.NoSuchPropertyException=\u30BF\u30A4\u30D7 {1} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3 {0} \u306F\u5B58\u5728\u3057\u307E\u305B\u3093
org.talend.ws.exception.Instantiation=\u30BF\u30A4\u30D7 {0} \u306E\u30AF\u30E9\u30B9\u3092\u30A4\u30F3\u30B9\u30BF\u30F3\u30B9\u5316\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093
org.talend.ws.exception.InvocationTargetPropertyAccessor=\u30D7\u30ED\u30D1\u30C6\u30A3\u30A2\u30AF\u30BB\u30C3\u30B5\u306F\u4F8B\u5916\u3092\u767A\u751F\u3055\u305B\u307E\u3057\u305F\uFF1A\u30AF\u30E9\u30B9 {1} \u306E\u30D7\u30ED\u30D1\u30C6\u30A3 {0}
org.talend.ws.exception.illegalAccessValueOf=enum\u578B {0} \u306E\u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3073\u51FA\u3059\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093
org.talend.ws.exception.Unknown=\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F
org.talend.ws.exception.InvalidEnumValueException=\u5024 {0} \u306F\u5217\u6319\u578B {1} \u3068\u3057\u3066\u6709\u52B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093
org.talend.ws.exception.InvalidParameterAnyType=\u3053\u306E\u3088\u3046\u306A anyTypes \u306E\u30DE\u30C3\u30D7\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059 : {anyType: value, anyType_type: qname}

View File

@@ -0,0 +1,8 @@
org.talend.ws.exception.IllegalPropertyAccessException=\u65E0\u6CD5\u8BBF\u95EE\u5C5E\u6027 {0}\uFF0C\u56E0\u4E3A\u5BF9\u4E8E\u7C7B\u578B {1} \u800C\u8A00\u8BE5\u5C5E\u6027\u4E0D\u53EF\u8BBF\u95EE
org.talend.ws.exception.NoSuchPropertyException=\u5C5E\u6027 {0} \u5BF9\u4E8E\u7C7B\u578B {1} \u800C\u8A00\u4E0D\u5B58\u5728
org.talend.ws.exception.Instantiation=\u65E0\u6CD5\u5B9E\u4F8B\u5316\u7C7B\u578B {0} \u7684\u7C7B
org.talend.ws.exception.InvocationTargetPropertyAccessor=\u5C5E\u6027\u8BBF\u95EE\u5668\u629B\u51FA\u4E86\u4E00\u4E2A\u5F02\u5E38\uFF1A\u7C7B {1} \u7684\u5C5E\u6027 {0}
org.talend.ws.exception.illegalAccessValueOf=\u65E0\u6CD5\u4E3A\u679A\u4E3E\u7C7B\u578B {0} \u8C03\u7528\u65B9\u6CD5valueOf
org.talend.ws.exception.Unknown=\u4E00\u4E2A\u672A\u77E5\u7684\u5F02\u5E38\u5DF2\u88AB\u629B\u51FA
org.talend.ws.exception.InvalidEnumValueException=\u503C {0} \u5BF9\u4E8E\u679A\u4E3E {1} \u65E0\u6548
org.talend.ws.exception.InvalidParameterAnyType=\u60A8\u5FC5\u987B\u6309\u5982\u4E0B\u6240\u793A\u4E3A anyType \u6307\u5B9A\u6620\u5C04\uFF1A{anyType: value, anyType_type: qname}

View File

@@ -0,0 +1,55 @@
<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>talendssl</artifactId>
<version>1.0-20190118</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>
<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

@@ -11,16 +11,13 @@ import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyStore;
import java.security.Security;
import java.util.Hashtable;
import javax.net.SocketFactory;
import javax.net.ssl.SSLSocketFactory;
import com.sun.net.ssl.KeyManagerFactory;
import com.sun.net.ssl.SSLContext;
import com.sun.net.ssl.TrustManager;
import com.sun.net.ssl.internal.ssl.Provider;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
public class AdvancedSocketFactory extends SSLSocketFactory {
@@ -30,8 +27,6 @@ public class AdvancedSocketFactory extends SSLSocketFactory {
private static AdvancedSocketFactory default_factory = null;
private static Hashtable factories = null;
private static String certStorePath = null;
private static String certStorePwd = null;
@@ -60,15 +55,6 @@ public class AdvancedSocketFactory extends SSLSocketFactory {
init(null, null);
}
private static void closeStream(InputStream in) {
if (in == null)
return;
try {
in.close();
} catch (Exception _ex) {
}
}
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
return factory.createSocket(host, port);
}
@@ -130,12 +116,12 @@ public class AdvancedSocketFactory extends SSLSocketFactory {
private void init(KeyStore ks, char password[]) {
SSLContext ctx = null;
com.sun.net.ssl.KeyManager keyManagers[] = null;
javax.net.ssl.KeyManager keyManagers[] = null;
TrustManager trustManagers[] = null;
try {
if (ks != null) {
KeyManagerFactory kmf = null;
kmf = KeyManagerFactory.getInstance("SunX509");
kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(ks, password);
keyManagers = kmf.getKeyManagers();
}
@@ -149,10 +135,6 @@ public class AdvancedSocketFactory extends SSLSocketFactory {
}
}
static {
Security.addProvider(new Provider());
}
public static void alwaysTrust() {
trustManagers = ALWAYS_TRUST_MANAGER;
}

View File

@@ -0,0 +1,23 @@
package talend.ssl;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
public class AlwaysTruster implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// no implementation required
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
// no implementation required
}
}

View File

@@ -12,10 +12,11 @@ import java.net.URLConnection;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import com.sun.net.ssl.TrustManagerFactory;
import com.sun.net.ssl.X509TrustManager;
import javax.net.ssl.TrustManagerFactory;
import javax.net.ssl.X509TrustManager;
public class Truster implements X509TrustManager {
@@ -61,15 +62,6 @@ public class Truster implements X509TrustManager {
init();
}
private boolean deleteCert(String id) {
try {
ks.deleteEntry(id);
} catch (KeyStoreException _ex) {
return false;
}
return true;
}
public X509Certificate[] getAcceptedIssuers() {
if (trustManager == null)
return null;
@@ -132,9 +124,9 @@ public class Truster implements X509TrustManager {
private X509TrustManager initTrustManager(KeyStore ks) throws NoSuchAlgorithmException, KeyStoreException {
TrustManagerFactory trustManagerFactory = null;
trustManagerFactory = TrustManagerFactory.getInstance("SunX509");
trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(ks);
com.sun.net.ssl.TrustManager trusts[] = trustManagerFactory.getTrustManagers();
javax.net.ssl.TrustManager trusts[] = trustManagerFactory.getTrustManagers();
return (X509TrustManager) trusts[0];
}
@@ -149,49 +141,12 @@ public class Truster implements X509TrustManager {
return false;
}
public boolean isClientTrusted(X509Certificate chain[]) {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
if (trustManager == null)
return false;
throw new CertificateException("Trust manager is not initialized");
else
return trustManager.isClientTrusted(chain);
}
public boolean isServerTrusted(X509Certificate chain[]) {
if (trustManager != null) {
boolean rs = trustManager.isServerTrusted(chain);
if (rs)
return rs;
}
X509Certificate ca = getCACert(chain);
if (ca != null) {
if (isAccepted(ca)) {
System.err.println("SSL Error:Server certificate chain verification failed.");
return false;
}
String id = String.valueOf(System.currentTimeMillis());
X509TrustManager tmpTrustManager = null;
try {
ks.setCertificateEntry(id, ca);
tmpTrustManager = initTrustManager(ks);
} catch (Exception e) {
System.err.println("ASF Truster: Failed to create tmp trust store : " + e.getMessage());
return false;
}
if (tmpTrustManager.isServerTrusted(chain)) {
if (this.isSaveCA) {
saveStore();
trustManager = tmpTrustManager;
}
return true;
} else {
System.err.println("SSL Error:Server certificate chain verification failed and \\nthe CA is missing.");
return false;
}
} else {
System.err
.println("SSL Error:CA certificate is not in the server certificate chain.\nPlease use the keytool command to import the server certificate.");
return false;
}
trustManager.checkClientTrusted(chain, authType);
}
private boolean saveStore() {
@@ -220,4 +175,43 @@ public class Truster implements X509TrustManager {
}
}
}
@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
if (trustManager != null) {
try {
trustManager.checkServerTrusted(chain, authType);
return;
} catch (Exception e) {
}
}
X509Certificate ca = getCACert(chain);
if (ca != null) {
if (!isAccepted(ca)) {
throw new CertificateException("Server certificate chain verification failed.");
}
String id = String.valueOf(System.currentTimeMillis());
X509TrustManager tmpTrustManager = null;
try {
ks.setCertificateEntry(id, ca);
tmpTrustManager = initTrustManager(ks);
} catch (Exception e) {
throw new CertificateException("ASF Truster: Failed to create tmp trust store", e);
}
try {
tmpTrustManager.checkServerTrusted(chain, authType);
if (this.isSaveCA) {
saveStore();
trustManager = tmpTrustManager;
}
return;
} catch (CertificateException e) {
throw new CertificateException(
"SSL Error:Server certificate chain verification failed and \nthe CA is missing.", e);
}
} else {
throw new CertificateException(
"CA certificate is not in the server certificate chain.\nPlease use the keytool command to import the server certificate.");
}
}
}

View File

@@ -1,19 +0,0 @@
package talend.ssl;
import java.security.cert.X509Certificate;
import com.sun.net.ssl.X509TrustManager;
public class AlwaysTruster implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
}
public boolean isClientTrusted(X509Certificate[] arg0) {
return true;
}
public boolean isServerTrusted(X509Certificate[] arg0) {
return true;
}
}

View File

@@ -279,24 +279,44 @@
IMetadataColumn column = columns.get(i);
String columnName = column.getLabel();
String typeToGenerate = "string";
if("id_Float".equals(column.getTalendType())) {
if("id_Float".equals(column.getTalendType()) || "id_Double".equals(column.getTalendType())) {
typeToGenerate = "float";
} else if("id_Integer".equals(column.getTalendType())) {
}else if("id_Integer".equals(column.getTalendType()) || "id_Long".equals(column.getTalendType()) || "id_Short".equals(column.getTalendType())) {
typeToGenerate = "integer";
} else if("id_Character".equals(column.getTalendType())) {
typeToGenerate = "string";
} else if("id_BigDecimal".equals(column.getTalendType())) {
typeToGenerate = "numeric";
} else if("id_Boolean".equals(column.getTalendType())) {
typeToGenerate = "boolean";
} else if("id_Date".equals(column.getTalendType())) {
typeToGenerate = "timestamp";
String pattern = column.getPattern();
if(pattern.length() == 12 || pattern.isEmpty() || "\"\"".equals(pattern)) {
typeToGenerate = "date";
}else if(pattern.length() > 12){
typeToGenerate = "timestamp";
}else{
typeToGenerate = "string";
}
}
%>
<%
String modeType = null;
if (!column.isNullable()) {
modeType = "REQUIRED";
} else {
modeType = "NULLABLE";
}
%>
com.google.api.services.bigquery.model.TableFieldSchema <%=columnName%>_<%=cid%> = new com.google.api.services.bigquery.model.TableFieldSchema();
<%=columnName%>_<%=cid%>.setName("<%=columnName%>");
<%=columnName%>_<%=cid%>.setType("<%=typeToGenerate%>");
<%=columnName%>_<%=cid%>.setMode("<%=modeType%>");
fields_<%=cid%>.add(<%=columnName%>_<%=cid%>);
<%
if(isLog4jEnabled){
%>
log.debug("<%=cid%> - Field index[<%=i%>] {\"name\":\"<%=columnName%>\",\"type\":\"<%=typeToGenerate%>\"}");
log.debug("<%=cid%> - Field index[<%=i%>] {\"name\":\"<%=columnName%>\",\"type\":\"<%=typeToGenerate%>\",\"mode\":\"<%=modeType%>\"}");
<%
}
}
@@ -336,7 +356,7 @@
queryLoad_<%=cid%>.setDestinationTable(destinationTable_<%=cid%>);
queryLoad_<%=cid%>.setSourceUris(java.util.Arrays.asList(<%=ElementParameterParser.getValue(node, "__GS_FILE__")%>));
queryLoad_<%=cid%>.setSkipLeadingRows(<%=ElementParameterParser.getValue(node, "__GS_FILE_HEADER__")%>);
queryLoad_<%=cid%>.setNullMarker("\\N");
config_<%=cid%>.setLoad(queryLoad_<%=cid%>);
job_<%=cid%>.setConfiguration(config_<%=cid%>);
@@ -375,10 +395,10 @@
}
if (jobExec_<%=cid%>.getStatus().getState().equals("RUNNING")
|| jobExec_<%=cid%>.getStatus().getState().equals("PENDING")) {
com.google.api.services.bigquery.model.Job pollJob_<%=cid%> = bigqueryclient_<%=cid%>.jobs().get(PROJECT_ID_<%=cid%>,jobExec_<%=cid%>.getJobReference().getJobId()).execute();
com.google.api.services.bigquery.model.Job pollJob_<%=cid%> = bigqueryclient_<%=cid%>.jobs().get(PROJECT_ID_<%=cid%>,jobExec_<%=cid%>.getJobReference().getJobId()).setLocation(jobExec_<%=cid%>.getJobReference().getLocation()).execute();
while (pollJob_<%=cid%>.getStatus().getState().equals("RUNNING") || pollJob_<%=cid%>.getStatus().getState().equals("PENDING")) {
Thread.sleep(1000);
pollJob_<%=cid%> = bigqueryclient_<%=cid%>.jobs().get(PROJECT_ID_<%=cid%>,jobExec_<%=cid%>.getJobReference().getJobId()).execute();
pollJob_<%=cid%> = bigqueryclient_<%=cid%>.jobs().get(PROJECT_ID_<%=cid%>,jobExec_<%=cid%>.getJobReference().getJobId()).setLocation(jobExec_<%=cid%>.getJobReference().getLocation()).execute();
System.out.println(String.format(
"Waiting on job %s ... Current status: %s", jobExec_<%=cid%>
.getJobReference().getJobId(), pollJob_<%=cid%>
@@ -440,6 +460,7 @@
/* ----START-CREATING-JOB (Cloud API)---- */
com.google.cloud.bigquery.TableId tableId_<%=cid%> = com.google.cloud.bigquery.TableId.of(<%=projectId%>, <%=dataset%>, <%=table%>);
com.google.cloud.bigquery.Table table_<%=cid%> = bigquery_<%=cid%>.getTable(tableId_<%=cid%>);
com.google.cloud.bigquery.LoadJobConfiguration.Builder loadJobBuilder_<%=cid%> = com.google.cloud.bigquery.LoadJobConfiguration.newBuilder(tableId_<%=cid%>, <%=gsFile%>);
if (<%=ElementParameterParser.getBooleanValue(node, "__DROP__")%> && table_<%=cid%> != null) {
boolean deleted = bigquery_<%=cid%>.delete(tableId_<%=cid%>);
if (deleted) {
@@ -454,9 +475,8 @@
throw new RuntimeException("Unable to delete table " + tableId_<%=cid%>);
}
}
boolean tableNotExist = table_<%=cid%> == null;
if (<%=ElementParameterParser.getBooleanValue(node, "__DROP__")%> || tableNotExist) {
boolean typeSupported = true;
boolean tableNotExist_<%=cid%> = table_<%=cid%> == null;
if (<%=ElementParameterParser.getBooleanValue(node, "__DROP__")%> || tableNotExist_<%=cid%>) {
java.util.List<com.google.cloud.bigquery.Field> fields_<%=cid%> = new java.util.ArrayList<>();
<%
List<IMetadataTable> metadatas = node.getMetadataList();
@@ -468,26 +488,28 @@
for (int i = 0; i < nbColumns; i++ ) {
IMetadataColumn column = columns.get(i);
String columnName = column.getLabel();
String typeToGenerate = null;
if("id_String".equals(column.getTalendType())) {
String typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.STRING";
if("id_String".equals(column.getTalendType()) || "id_Character".equals(column.getTalendType())) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.STRING";
} else if ("id_Float".equals(column.getTalendType()) || "id_Double".equals(column.getTalendType())) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.FLOAT";
} else if ("id_Short".equals(column.getTalendType()) || "id_Integer".equals(column.getTalendType()) || "id_Long".equals(column.getTalendType())) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.INTEGER";
} else if ("id_BigDecimal".equals(column.getTalendType())) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.NUMERIC";
} else if ("id_Boolean".equals(column.getTalendType())) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.BOOLEAN";
} else if ("id_Date".equals(column.getTalendType())) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.TIMESTAMP";
} else {
%>
typeSupported = false;
<%
} else if ("id_Date".equals(column.getTalendType())) {
String pattern = column.getPattern();
if(pattern.length() == 12 || pattern.isEmpty() || "\"\"".equals(pattern)) {
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.DATE";
}else if(pattern.length() > 12){
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.TIMESTAMP";
}else{
typeToGenerate = "com.google.cloud.bigquery.LegacySQLTypeName.STRING";
}
}
%>
if (!typeSupported) {
throw new IllegalArgumentException("unsupported type for column [<%=columnName%>]: " + "<%=column.getTalendType()%>");
}
com.google.cloud.bigquery.Field field_<%=i%> = com.google.cloud.bigquery.Field.of("<%=columnName%>", <%=typeToGenerate%>);
fields_<%=cid%>.add(field_<%=i%>);
<%
@@ -500,11 +522,18 @@
}
}
%>
com.google.cloud.bigquery.Schema schema_<%=cid%> = com.google.cloud.bigquery.Schema.of(fields_<%=cid%>);
com.google.cloud.bigquery.TableInfo tableInfo_<%=cid%> = com.google.cloud.bigquery.TableInfo.newBuilder(tableId_<%=cid%>, com.google.cloud.bigquery.StandardTableDefinition.of(schema_<%=cid%>)).build();
table_<%=cid%> = bigquery_<%=cid%>.create(tableInfo_<%=cid%>);
loadJobBuilder_<%=cid%>.setSchema(schema_<%=cid%>);
}
com.google.cloud.bigquery.Job job_<%=cid%> = table_<%=cid%>.load(com.google.cloud.bigquery.FormatOptions.csv(), <%=gsFile%>);
com.google.cloud.bigquery.LoadJobConfiguration configuration_<%=cid%> = loadJobBuilder_<%=cid%>.setNullMarker("\\N")
.setFormatOptions(com.google.cloud.bigquery.FormatOptions.csv())
.build();
com.google.cloud.bigquery.Job job_<%=cid%> = bigquery_<%=cid%>.create(com.google.cloud.bigquery.JobInfo.of(configuration_<%=cid%>));
job_<%=cid%> = job_<%=cid%>.waitFor(com.google.cloud.RetryOption.initialRetryDelay(org.threeten.bp.Duration.ofSeconds(1)), com.google.cloud.RetryOption.totalTimeout(org.threeten.bp.Duration.ofSeconds(30)));
if (job_<%=cid%> != null && job_<%=cid%>.getStatus().getError() == null) {
<%
@@ -523,4 +552,4 @@
} else {
throw new IllegalArgumentException("authentication mode should be either \"SERVICEACCOUNT\" or \"OAUTH\", but it is " + authMode);
}
%>
%>

View File

@@ -62,11 +62,12 @@ class BigQueryUtil_<%=cid%> {
com.google.api.services.bigquery.model.JobConfigurationQuery queryConfig = new com.google.api.services.bigquery.model.JobConfigurationQuery();
queryConfig.setQuery(query);
queryConfig.setUseLegacySql(useLegacySql);
String location = getLocation(queryConfig);
if(useLargeResult){
this.useLargeResult = true;
tempDataset = genTempName("dataset");
tempTable = genTempName("table");
createDataset(getLocation(queryConfig));
createDataset(location);
queryConfig.setAllowLargeResults(true);
queryConfig.setDestinationTable(new com.google.api.services.bigquery.model.TableReference()
.setProjectId(projectId)
@@ -131,7 +132,7 @@ class BigQueryUtil_<%=cid%> {
%>
// wait for query execution
while (true) {
com.google.api.services.bigquery.model.Job pollJob = bigqueryclient.jobs().get(projectId, jobId.getJobId()).execute();
com.google.api.services.bigquery.model.Job pollJob = bigqueryclient.jobs().get(projectId, jobId.getJobId()).setLocation(location).execute();
com.google.api.services.bigquery.model.JobStatus status = pollJob.getStatus();
if (status.getState().equals("DONE")) {
com.google.api.services.bigquery.model.ErrorProto errorProto = status.getErrorResult();

View File

@@ -228,7 +228,7 @@
.getService();
com.google.cloud.bigquery.QueryJobConfiguration queryConfiguration_<%=cid%> = com.google.cloud.bigquery.QueryJobConfiguration.newBuilder(<%=query%>).setUseLegacySql(<%=useLegacySql%>).build();
com.google.cloud.bigquery.JobId jobId_tBigQueryInput_1 = com.google.cloud.bigquery.JobId.of(java.util.UUID.randomUUID().toString());
com.google.cloud.bigquery.JobId jobId_<%=cid%> = com.google.cloud.bigquery.JobId.of(java.util.UUID.randomUUID().toString());
com.google.cloud.bigquery.Job job_<%=cid%> = bigquery_<%=cid%>.create(com.google.cloud.bigquery.JobInfo.newBuilder(queryConfiguration_<%=cid%>).setJobId(jobId_<%=cid%>).build());
<%

View File

@@ -43,10 +43,8 @@
JavaType javaType = JavaTypesManager.getJavaTypeFromId(column.getTalendType());
String pattern = column.getPattern() == null || column.getPattern().trim().length() == 0 ? null : column.getPattern();
if(JavaTypesManager.isJavaPrimitiveType( column.getTalendType(), column.isNullable())){
%>
if(<%=conn.getName() %>.<%=column.getLabel() %> != null) {
<%
if(javaType == JavaTypesManager.BOOLEAN ){
if(javaType == JavaTypesManager.BOOLEAN ){
%>
row_<%=cid%>[<%=i%>] = String.valueOf(
true == <%=conn.getName() %>.<%=column.getLabel() %> ?"1":"0"
@@ -56,12 +54,8 @@
%>
row_<%=cid%>[<%=i%>] = String.valueOf(<%=conn.getName() %>.<%=column.getLabel() %>);
<%
}
%>
} else {
row_<%=cid%>[<%=i%>] = null;
}
<%
}
}else {
%>
if(<%=conn.getName() %>.<%=column.getLabel() %> != null){
@@ -70,10 +64,24 @@
%>
row_<%=cid%>[<%=i%>] = <%=conn.getName() %>.<%=column.getLabel() %>;
<%
}else if(javaType == JavaTypesManager.DATE && pattern != null){
%>
row_<%=cid%>[<%=i%>] = FormatterUtils.format_Date(<%=conn.getName() %>.<%=column.getLabel() %>, "yyyy-MM-dd HH:mm:ss");
}else if(javaType == JavaTypesManager.DATE && pattern == null){
%>
row_<%=cid%>[<%=i%>] = FormatterUtils.format_Date(<%=conn.getName() %>.<%=column.getLabel() %>, "yyyy-MM-dd");
<%
}else if(javaType == JavaTypesManager.DATE && pattern != null){
if(pattern.length() > 12){
%>
row_<%=cid%>[<%=i%>] = FormatterUtils.format_Date(<%=conn.getName() %>.<%=column.getLabel() %>, "yyyy-MM-dd HH:mm:ss");
<%
}else if(pattern.length() == 12 || "\"\"".equals(pattern)) {
%>
row_<%=cid%>[<%=i%>] = FormatterUtils.format_Date(<%=conn.getName() %>.<%=column.getLabel() %>, "yyyy-MM-dd");
<%
}else {
%>
row_<%=cid%>[<%=i%>] = FormatterUtils.format_Date(<%=conn.getName() %>.<%=column.getLabel() %>, <%=pattern%>);
<%
}
}else if(javaType == JavaTypesManager.BYTE_ARRAY){
%>
row_<%=cid%>[<%=i%>] = java.nio.charset.Charset.forName(<%=encoding %>).decode(java.nio.ByteBuffer.wrap(<%=conn.getName() %>.<%=column.getLabel() %>)).toString();
@@ -92,7 +100,7 @@
}
%>
} else {
row_<%=cid%>[<%=i%>] = null;
row_<%=cid%>[<%=i%>] = "\\N";
}
<%
}

View File

@@ -809,7 +809,8 @@
NAME="NOTE"
FIELD="LABEL"
NUM_ROW="20"
SHOW_IF="(DBTYPE=='DBORACLE') AND (CONNECTION_TYPE == 'ORACLE_SID' OR
SHOW_IF="USE_EXISTING_CONNECTION == 'false' AND
(DBTYPE=='DBORACLE') AND (CONNECTION_TYPE == 'ORACLE_SID' OR
CONNECTION_TYPE == 'ORACLE_SERVICE_NAME' OR
CONNECTION_TYPE == 'ORACLE_OCI' OR
CONNECTION_TYPE == 'ORACLE_RAC')">

View File

@@ -1160,11 +1160,12 @@ class OracleManager extends Manager {
}
public String getConnection() {
StringBuilder javaCode = new StringBuilder();
if (additionalParams == null || "\"\"".equals(additionalParams.trim())){
if(useExistingConnection) {
javaCode.append(retrieveTable());
javaCode.append("java.sql.Connection conn_" + cid + " = (java.sql.Connection)globalMap.get(\"conn_" + connection + "\");");
} else if (("ORACLE_WALLET").equals(connectionType)) {
if(useExistingConnection) {
javaCode.append(retrieveTable());
javaCode.append("java.sql.Connection conn_" + cid + " = (java.sql.Connection)globalMap.get(\"conn_" + connection + "\");");
} else if (additionalParams == null || "\"\"".equals(additionalParams.trim())){
if (("ORACLE_WALLET").equals(connectionType)) {
javaCode.append(retrieveTable());
javaCode.append("java.lang.Class.forName(\"" + getDriver()+ "\");\r\n");
log4jCodeGenerateUtil.connect_begin_noUser();
@@ -1189,7 +1190,7 @@ class OracleManager extends Manager {
javaCode.append("java.sql.Connection conn_" + cid + " = java.sql.DriverManager.getConnection(url_" + cid + ", atnParamsPrope_" + cid + ");\r\n");
}
return javaCode.toString();
}
}
protected String getDBMSId() {
return "oracle_id";
}

View File

@@ -461,7 +461,7 @@ pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(deleteQuery_<%=cid %>);
StringBuilder mergeInsertName = new StringBuilder() ;
StringBuilder mergeInsertValue = new StringBuilder() ;
%>
String mergeQuery = "MERGE INTO "+ tableName_<%=cid%> +" target" + " USING (" + select_query_<%=cid %> + ") source ON (" +
String mergeQuery_<%=cid %> = "MERGE INTO "+ tableName_<%=cid%> +" target" + " USING (" + select_query_<%=cid %> + ") source ON (" +
"<%=mergeCondition%>" + ")" ;
@@ -484,28 +484,28 @@ pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(deleteQuery_<%=cid %>);
}
}
%>
mergeQuery += " WHEN MATCHED THEN UPDATE SET <%=mergeUpdate%> " ;
mergeQuery_<%=cid %> += " WHEN MATCHED THEN UPDATE SET <%=mergeUpdate%> " ;
<%if (useUpdateWhere) {
String useUpdateWhereString = ElementParameterParser.getValue(node,"__MERGE_UPDATE_WHERE_STRING__");
if(useUpdateWhereString == null || useUpdateWhereString.length() == 0){
%>
mergeQuery += "WHERE " + "";
mergeQuery_<%=cid %> += "WHERE " + "";
<%
}
else {%>
mergeQuery += "WHERE " + <%=useUpdateWhereString %>;
mergeQuery_<%=cid %> += "WHERE " + <%=useUpdateWhereString %>;
<% }
}%>
<%if (useUpdateDeleteWhere) {
String useUpdateDeleteWhereString = ElementParameterParser.getValue(node,"__MERGE_UPDATE_DELETE_WHERE_STRING__");
if(useUpdateDeleteWhereString == null || useUpdateDeleteWhereString.length() == 0){
%>
mergeQuery += " DELETE WHERE " + "" ;
mergeQuery_<%=cid %> += " DELETE WHERE " + "" ;
<%
}
else {%>
mergeQuery += " DELETE WHERE " + <%=useUpdateDeleteWhereString%> ;
mergeQuery_<%=cid %> += " DELETE WHERE " + <%=useUpdateDeleteWhereString%> ;
<% }
}%>
<%
@@ -531,21 +531,21 @@ pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(deleteQuery_<%=cid %>);
}
}
%>
mergeQuery += " WHEN NOT MATCHED THEN INSERT ( <%=mergeInsertName%>) VALUES ( <%=mergeInsertValue%>) ";
mergeQuery_<%=cid %> += " WHEN NOT MATCHED THEN INSERT ( <%=mergeInsertName%>) VALUES ( <%=mergeInsertValue%>) ";
<%
}
if (useInsertWhere) {
String useInsertWhereString = ElementParameterParser.getValue(node,"__MERGE_INSERT_WHERE_STRING__");
if(useInsertWhereString == null || useInsertWhereString.length() == 0){
%>
mergeQuery += " WHERE " + "";
mergeQuery_<%=cid %> += " WHERE " + "";
<%
} else {%>
mergeQuery += " WHERE " + <%=useInsertWhereString%> ;
mergeQuery_<%=cid %> += " WHERE " + <%=useInsertWhereString%> ;
<%}
}
%>
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(mergeQuery);
pstmt_<%=cid %> = conn_<%=cid%>.prepareStatement(mergeQuery_<%=cid %>);
<%
}
%>
@@ -588,8 +588,17 @@ nb_line_updated_<%=cid%> = pstmt_<%=cid %>.executeUpdate();
<%
}else if (("MERGE").equals(dataAction)){
%>
<%if(!isLog4jEnabled){%>System.out.println("Merge with : \n" + mergeQuery +"\n");<%}%>
<%log4jCodeGenerateUtil.logInfo(node,"info",cid+" - Executing SQL:\"+mergeQuery+\"");%>
<%
if(!isLog4jEnabled){
%>
System.out.println("Merge with : \n" + mergeQuery_<%=cid %> +"\n");
<%
} else {
%>
log.info("<%=cid %> - Executing SQL: " + mergeQuery_<%=cid %>);
<%
}
%>
nb_line_merged_<%=cid%> = pstmt_<%=cid %>.executeUpdate();
<%log4jCodeGenerateUtil.logInfo(node,"info",cid+" - Executed successfully.");%>
<%if(!isLog4jEnabled){%>System.out.println("--> " + nb_line_merged_<%=cid%> + " rows merged. \n");<%}%>

View File

@@ -152,8 +152,12 @@ for (int i=0;i<mapping.size();i++) {
} else if(javaType == JavaTypesManager.LIST && splitList){
%>
<%=firstConnName%>.<%=column.getLabel() %> = ParserUtils.parseTo_List(value_<%=cid%>.toString(),",");
<%
} else {
<%
} else if (javaType == JavaTypesManager.BYTE_ARRAY) {
%>
<%=firstConnName%>.<%=column.getLabel() %> = value_<%=cid%>.toString().getBytes();
<%
} else {
%>
<%=firstConnName%>.<%=column.getLabel() %> = ParserUtils.parseTo_<%=typeToGenerate %>(value_<%=cid%>.toString());
<%

View File

@@ -287,9 +287,13 @@ if(outConns!=null){
if (javaType == JavaTypesManager.DATE) {
%>
<%=firstConnName%>.<%=column.getLabel() %> = ParserUtils.parseTo_Date(str_<%= cid %>, <%= patternValue %>);
<%
<%
} else if (javaType == JavaTypesManager.BYTE_ARRAY){
%>
<%=firstConnName%>.<%=column.getLabel() %> = str_<%= cid %>.toString().getBytes();
<%
} else {
%>
%>
<%=firstConnName%>.<%=column.getLabel() %> = ParserUtils.parseTo_<%= typeToGenerate %>(str_<%= cid %>);
<%
}

View File

@@ -239,7 +239,7 @@
<IMPORT NAME="Java-FTP" MODULE="edtftpj-2.5.0.jar" MVN="mvn:com.enterprisedt/edtftpj/2.5.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/edtftpj-2.5.0.jar" REQUIRED_IF="(SFTP == 'false') AND (FTPS == 'false')"/>
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true')"/>
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar" MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" REQUIRED_IF="(FTPS == 'true')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar" MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" REQUIRED_IF="(FTPS == 'true')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -296,8 +296,8 @@
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="jakarta-oro" MODULE="jakarta-oro-2.0.8.jar" MVN="mvn:org.talend.libraries/jakarta-oro-2.0.8/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache/lib/jakarta-oro-2.0.8.jar" REQUIRED="true" />
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -283,8 +283,8 @@ COMPATIBILITY="ALL"
<IMPORT NAME="Java-FTP" MODULE="edtftpj-2.5.0.jar" MVN="mvn:com.enterprisedt/edtftpj/2.5.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/edtftpj-2.5.0.jar" REQUIRED_IF="(SFTP == 'false') AND (FTPS == 'false') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -261,8 +261,8 @@
<IMPORT NAME="Java-FTP" MODULE="edtftpj-2.5.0.jar" MVN="mvn:com.enterprisedt/edtftpj/2.5.0" REQUIRED_IF="(SFTP == 'false') AND (FTPS == 'false') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -258,8 +258,8 @@
<IMPORT NAME="Java-FTP" MODULE="edtftpj-2.5.0.jar" MVN="mvn:com.enterprisedt/edtftpj/2.5.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/edtftpj-2.5.0.jar" REQUIRED_IF="(SFTP == 'false') AND (FTPS == 'false') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -302,8 +302,8 @@ COMPATIBILITY="ALL"
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="jakarta-oro" MODULE="jakarta-oro-2.0.8.jar" MVN="mvn:org.talend.libraries/jakarta-oro-2.0.8/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache/lib/jakarta-oro-2.0.8.jar" REQUIRED="true" />
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -346,8 +346,8 @@ COMPATIBILITY="ALL"
<IMPORT NAME="Java-FTP" MODULE="edtftpj-2.5.0.jar" MVN="mvn:com.enterprisedt/edtftpj/2.5.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/edtftpj-2.5.0.jar" REQUIRED_IF="(SFTP == 'false') AND (FTPS == 'false') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -264,8 +264,8 @@ COMPATIBILITY="ALL"
<IMPORT NAME="Java-FTP" MODULE="edtftpj-2.5.0.jar" MVN="mvn:com.enterprisedt/edtftpj/2.5.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/edtftpj-2.5.0.jar" REQUIRED_IF="(SFTP == 'false') AND (FTPS == 'false') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -253,8 +253,8 @@ COMPATIBILITY="ALL"
<IMPORT NAME="Java-SFTP" MODULE="jsch-0.1.53.jar" MVN="mvn:org.talend.libraries/jsch-0.1.53/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.ftp/lib/jsch-0.1.53.jar" REQUIRED_IF="(SFTP == 'true') AND (USE_EXISTING_CONNECTION == 'false')"/>
<IMPORT NAME="jakarta-oro" MODULE="jakarta-oro-2.0.8.jar" MVN="mvn:org.talend.libraries/jakarta-oro-2.0.8/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache/lib/jakarta-oro-2.0.8.jar" REQUIRED="true" />
<IMPORT NAME="Java-FTPS" MODULE="commons-net-3.6.jar" MVN="mvn:commons-net/commons-net/3.6" REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend.jar"
<IMPORT NAME="Java-FTPS-talend" MODULE="commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
MVN="mvn:org.talend.libraries/commons-net-ftps-proxy/3.6.1-talend-20190128" UrlPath="platform:/plugin/org.talend.designer.components.localprovider/components/tFTPConnection/commons-net-ftps-proxy-3.6.1-talend-20190128.jar"
REQUIRED_IF="(FTPS == 'true') AND (USE_EXISTING_CONNECTION == 'false')" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -62,8 +62,8 @@
<IMPORTS>
<IMPORT NAME="jets3t-0.9.1" MODULE="jets3t-0.9.1.jar" MVN="mvn:org.talend.libraries/jets3t-0.9.1/6.0.0" REQUIRED="true" />
<IMPORT NAME="commons-logging-1.1.3" MODULE="commons-logging-1.1.3.jar" MVN="mvn:commons-logging/commons-logging/1.1.3" UrlPath="platform:/plugin/org.talend.libraries.apache.common/lib/commons-logging-1.1.3.jar" REQUIRED="true" />
<IMPORT NAME="httpclient-4.3.6" MODULE="httpclient-4.3.6.jar" MVN="mvn:org.talend.libraries/httpclient-4.3.6/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache.http/lib/httpclient-4.3.6.jar" REQUIRED="true" />
<IMPORT NAME="httpcore-4.3.3" MODULE="httpcore-4.3.3.jar" MVN="mvn:org.talend.libraries/httpcore-4.3.3/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache.http/lib/httpcore-4.3.3.jar" REQUIRED="true" />
<IMPORT NAME="httpclient-4.5.5" MODULE="httpclient-4.5.5.jar" MVN="mvn:org.talend.libraries/httpclient-4.5.5/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache.http/lib/httpclient-4.5.5.jar" REQUIRED="true" />
<IMPORT NAME="httpcore-4.4.9" MODULE="httpcore-4.4.9.jar" MVN="mvn:org.talend.libraries/httpcore-4.4.9/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache.http/lib/httpcore-4.4.9.jar" REQUIRED="true" />
<IMPORT NAME="commons-codec-1.6" MODULE="commons-codec-1.6.jar" MVN="mvn:org.talend.libraries/commons-codec-1.6/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.apache.common/lib/commons-codec-1.6.jar" REQUIRED="true" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -177,7 +177,7 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="ldap" MODULE="talendssl.jar" MVN="mvn:org.talend.libraries/talendssl/6.0.0" REQUIRED="true" />
<IMPORT NAME="ldap" MODULE="talendssl-1.0-20190118.jar" MVN="mvn:org.talend.libraries/talendssl/1.0-20190118" REQUIRED="true" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -110,7 +110,7 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="ldap" MODULE="talendssl.jar" MVN="mvn:org.talend.libraries/talendssl/6.0.0" REQUIRED="true" />
<IMPORT NAME="ldap" MODULE="talendssl-1.0-20190118.jar" MVN="mvn:org.talend.libraries/talendssl/1.0-20190118" REQUIRED="true" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -191,7 +191,7 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="ldap" MODULE="talendssl.jar" MVN="mvn:org.talend.libraries/talendssl/6.0.0" REQUIRED="true" />
<IMPORT NAME="ldap" MODULE="talendssl-1.0-20190118.jar" MVN="mvn:org.talend.libraries/talendssl/1.0-20190118" REQUIRED="true" />
</IMPORTS>
</CODEGENERATION>

View File

@@ -199,7 +199,7 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="ldap" MODULE="talendssl.jar" MVN="mvn:org.talend.libraries/talendssl/6.0.0" REQUIRED="true" />
<IMPORT NAME="ldap" MODULE="talendssl-1.0-20190118.jar" MVN="mvn:org.talend.libraries/talendssl/1.0-20190118" REQUIRED="true" />
</IMPORTS>
</CODEGENERATION>
<RETURNS>

View File

@@ -138,7 +138,7 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="ldap" MODULE="talendssl.jar" MVN="mvn:org.talend.libraries/talendssl/6.0.0" REQUIRED="true" />
<IMPORT NAME="ldap" MODULE="talendssl-1.0-20190118.jar" MVN="mvn:org.talend.libraries/talendssl/1.0-20190118" REQUIRED="true" />
</IMPORTS>
</CODEGENERATION>
<RETURNS>

View File

@@ -398,10 +398,15 @@ skeleton="../templates/db_output_bulk.skeleton"
// added "print command" feature
<% if (printCommand == true) { %>
System.out.println("INFO: executing nzload command:");
for( String cmd : cmds ) {
System.out.print(cmd + " ");
}
System.out.println("INFO: executing nzload command:");
for(int i = 0; i < cmds.length; i++) {
if ("-pw".equals(cmds[i]) && decryptedPwd_<%=cid %>.equals(cmds[i+1])) {
System.out.print(cmds[i] + " " + routines.system.PasswordEncryptUtil.PASSWORD_FOR_LOGS_VALUE + " ");
i++;
} else {
System.out.print(cmds[i] + " ");
}
}
<% } %>
Runtime rt = Runtime.getRuntime();

View File

@@ -361,7 +361,9 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="TNS" MODULE="tns.jar" MVN="mvn:org.talend.libraries/tns/6.0.0" REQUIRED_IF="(USE_TNS_FILE == 'true')" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar" REQUIRED_IF="(DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_10')" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0"
UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar"
REQUIRED_IF="(DB_VERSION=='ORACLE_10') OR (DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_12') OR (DB_VERSION=='ORACLE_18')" />
<IMPORT NAME="ORACLE_18" MODULE="ojdbc8-12.2.0.1.jar" MVN="mvn:com.oracle.jdbc/ojdbc8/12.2.0.1" REQUIRED_IF="(DB_VERSION == 'ORACLE_18')" />
<IMPORT NAME="ORACLE_12" MODULE="ojdbc7.jar" MVN="mvn:org.talend.libraries/ojdbc7/6.0.0" BundleID="" REQUIRED_IF="(DB_VERSION == 'ORACLE_12')" />
<IMPORT NAME="ORACLE_11" MODULE="ojdbc6.jar" MVN="mvn:org.talend.libraries/ojdbc6/6.0.0" BundleID="" REQUIRED_IF="(DB_VERSION == 'ORACLE_11') " />

View File

@@ -223,7 +223,9 @@
<IMPORT NAME="Driver-Oracle18c" MODULE="ojdbc8-12.2.0.1.jar" MVN="mvn:com.oracle.jdbc/ojdbc8/12.2.0.1" REQUIRED_IF="(DB_VERSION == 'ORACLE_18') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="Driver-Oracle-XDB" MODULE="xdb.jar" MVN="mvn:org.talend.libraries/xdb/6.0.0" REQUIRED_IF="SCHEMA.DB_TYPE IN ['XMLTYPE']" />
<IMPORT NAME="Driver-Oracle-XMLPARSERV2" MODULE="xmlparserv2.jar" MVN="mvn:org.talend.libraries/xmlparserv2/6.0.0" BundleID="" REQUIRED_IF="SCHEMA.DB_TYPE IN ['XMLTYPE']" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar" REQUIRED_IF="(DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_10')" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0"
UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar"
REQUIRED_IF="(DB_VERSION=='ORACLE_10') OR (DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_12') OR (DB_VERSION=='ORACLE_18')" />
</IMPORTS>
</CODEGENERATION>
<RETURNS>

View File

@@ -506,7 +506,9 @@
<IMPORTS>
<IMPORT NAME="Driver-Oracle-XDB" MODULE="xdb.jar" MVN="mvn:org.talend.libraries/xdb/6.0.0" REQUIRED_IF="SCHEMA.DB_TYPE IN ['XMLTYPE']" />
<IMPORT NAME="Driver-Oracle-XMLPARSERV2" MODULE="xmlparserv2.jar" MVN="mvn:org.talend.libraries/xmlparserv2/6.0.0" BundleID="" REQUIRED_IF="SCHEMA.DB_TYPE IN ['XMLTYPE']" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar" REQUIRED_IF="(DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_10')" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0"
UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar"
REQUIRED_IF="(DB_VERSION=='ORACLE_10') OR (DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_12') OR (DB_VERSION=='ORACLE_18')" />
<IMPORT NAME="ORACLE_18" MODULE="ojdbc8-12.2.0.1.jar" MVN="mvn:com.oracle.jdbc/ojdbc8/12.2.0.1" REQUIRED_IF="(DB_VERSION == 'ORACLE_18') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="ORACLE_12" MODULE="ojdbc7.jar" MVN="mvn:org.talend.libraries/ojdbc7/6.0.0" BundleID="" REQUIRED_IF="(DB_VERSION == 'ORACLE_12') AND (USE_EXISTING_CONNECTION == 'false') AND (SPECIFY_DATASOURCE_ALIAS == 'false')" />
<IMPORT NAME="ORACLE_11" MODULE="ojdbc6.jar" MVN="mvn:org.talend.libraries/ojdbc6/6.0.0" BundleID="" REQUIRED_IF="(DB_VERSION == 'ORACLE_11') AND (USE_EXISTING_CONNECTION == 'false') AND (SPECIFY_DATASOURCE_ALIAS == 'false')" />

View File

@@ -583,7 +583,9 @@
<CODEGENERATION>
<IMPORTS>
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0" UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar" REQUIRED_IF="(DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_10')" />
<IMPORT NAME="Talend-oracle-timestamptz" MODULE="talend-oracle-timestamptz.jar" MVN="mvn:org.talend.libraries/talend-oracle-timestamptz/6.0.0"
UrlPath="platform:/plugin/org.talend.libraries.custom/lib/talend-oracle-timestamptz.jar"
REQUIRED_IF="(DB_VERSION=='ORACLE_10') OR (DB_VERSION=='ORACLE_11') OR (DB_VERSION=='ORACLE_12') OR (DB_VERSION=='ORACLE_18')" />
<IMPORT NAME="ORACLE_18" MODULE="ojdbc8-12.2.0.1.jar" MVN="mvn:com.oracle.jdbc/ojdbc8/12.2.0.1" REQUIRED_IF="(DB_VERSION == 'ORACLE_18') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="ORACLE_12" MODULE="ojdbc7.jar" MVN="mvn:org.talend.libraries/ojdbc7/6.0.0" REQUIRED_IF="(DB_VERSION == 'ORACLE_12') AND (USE_EXISTING_CONNECTION == 'false')" />
<IMPORT NAME="ORACLE_11" MODULE="ojdbc6.jar" MVN="mvn:org.talend.libraries/ojdbc6/6.0.0" REQUIRED_IF="(DB_VERSION == 'ORACLE_11') AND (USE_EXISTING_CONNECTION == 'false')" />

View File

@@ -59,14 +59,12 @@ boolean isNewerEmailFirst = ("true").equals(ElementParameterParser.getValue(node
if (useSSL) {
if ("pop3".equals(protocol)){
%>
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
props_<%=cid %>.setProperty("mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props_<%=cid %>.setProperty("mail.pop3.socketFactory.fallback", "false");
props_<%=cid %>.setProperty("mail.pop3.socketFactory.port", port_<%=cid %> + "");
<%
} else {
%>
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
props_<%=cid %>.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props_<%=cid %>.setProperty("mail.imap.socketFactory.fallback", "false");
props_<%=cid %>.setProperty("mail.imap.socketFactory.port", port_<%=cid %> + "");

View File

@@ -12,19 +12,26 @@ imports="
public void createURL(INode node) {
super.createURL(node);
boolean useLogFile= "true".equals(ElementParameterParser.getValue(node, "__USE_LOG_FILE__"));
String logLevel= ElementParameterParser.getValue(node, "__LOG_LEVEL__");
String logFile= ElementParameterParser.getValue(node, "__LOG_FILE__");
String jdbcUrl = ElementParameterParser.getValue(node, "__JDBC_URL__");
if (!logLevel.equals("0")) {
if(!logLevel.equals("0")){
if (useLogFile) {
%>
java.io.Writer output_<%=cid %> = new java.io.FileWriter(<%= logFile %>, true);
java.io.PrintWriter logWriter_<%=cid %> = new java.io.PrintWriter(output_<%=cid %>,true);
globalMap.put("logWriter_<%=cid %>", logWriter_<%=cid %>);
java.sql.DriverManager.setLogWriter(logWriter_<%=cid %>);
<%
}else{%>
java.io.PrintWriter logWriter_<%=cid %> = new java.io.PrintWriter(System.out,true);
<%
}
%>
globalMap.put("logWriter_<%=cid %>", logWriter_<%=cid %>);
java.sql.DriverManager.setLogWriter(logWriter_<%=cid %>);
<%}%>
StringBuilder sbuilder_<%=cid%> = new StringBuilder();
sbuilder_<%=cid%>.append("jdbc:redshift:");
<%

View File

@@ -154,11 +154,19 @@
</PARAMETERS>
<ADVANCED_PARAMETERS>
<PARAMETER
NAME="USE_LOG_FILE"
FIELD="CHECK"
NUM_ROW="10"
REQUIRED="true"
>
</PARAMETER>
<PARAMETER
NAME="LOG_FILE"
FIELD="FILE"
NUM_ROW="10"
REQUIRED="true"
SHOW_IF="USE_LOG_FILE == 'true'"
>
<DEFAULT>"__COMP_DEFAULT_FILE_DIR__/redshift-jdbc.log"</DEFAULT>
</PARAMETER>

View File

@@ -16,6 +16,7 @@ AUTO_COMMIT.NAME = Auto Commit
TYPE.NAME=Database Driver
PROPERTY.NAME=Property Type
USE_LOG_FILE.NAME=Use Log file
LOG_FILE.NAME=Log file
LOG_LEVEL.NAME=Logging level
LOG_LEVEL.ITEM.NONE=None

View File

@@ -21,17 +21,27 @@ imports="
public void setURL(INode node) {
boolean useLogFile= "true".equals(ElementParameterParser.getValue(node, "__USE_LOG_FILE__"));
String logLevel= ElementParameterParser.getValue(node, "__LOG_LEVEL__");
String logFile= ElementParameterParser.getValue(node, "__LOG_FILE__");
String jdbcUrl = ElementParameterParser.getValue(node, "__JDBC_URL__");
if (!logLevel.equals("0")) {
if(!logLevel.equals("0")){
if (useLogFile) {
%>
java.io.Writer output_<%=cid %> = new java.io.FileWriter(<%= logFile %>, true);
java.io.PrintWriter logWriter_<%=cid %> = new java.io.PrintWriter(output_<%=cid %>,true);
java.sql.DriverManager.setLogWriter(logWriter_<%=cid %>);
<%
}else{%>
java.io.PrintWriter logWriter_<%=cid %> = new java.io.PrintWriter(System.out,true);
<%
}
%>
globalMap.put("logWriter_<%=cid %>", logWriter_<%=cid %>);
java.sql.DriverManager.setLogWriter(logWriter_<%=cid %>);
<%}%>
StringBuilder sbuilder_<%=cid%> = new StringBuilder();
sbuilder_<%=cid%>.append("jdbc:redshift:");
<%

View File

@@ -198,12 +198,21 @@
</PARAMETERS>
<ADVANCED_PARAMETERS>
<PARAMETER
NAME="USE_LOG_FILE"
FIELD="CHECK"
NUM_ROW="10"
SHOW_IF="USE_EXISTING_CONNECTION == 'false'"
>
</PARAMETER>
<PARAMETER
NAME="LOG_FILE"
FIELD="FILE"
NUM_ROW="10"
REQUIRED="true"
SHOW_IF="USE_EXISTING_CONNECTION == 'false'"
SHOW_IF="(USE_EXISTING_CONNECTION == 'false') AND (USE_LOG_FILE == 'true')"
>
<DEFAULT>"__COMP_DEFAULT_FILE_DIR__/redshift-jdbc.log"</DEFAULT>
</PARAMETER>

View File

@@ -36,6 +36,7 @@ TRIM_COLUMN.ITEM.TRIM=Trim
TABLE.NAME=Table Name
MAPPING.NAME=Mapping
USE_LOG_FILE.NAME=Use Log file
LOG_FILE.NAME=Log file
LOG_LEVEL.NAME=Logging level
LOG_LEVEL.ITEM.NONE=None

View File

@@ -33,6 +33,7 @@ imports="
%>
<%@ include file="../tS3Connection/S3Client.javajet" %>
<%if(!use_select){%>
com.amazonaws.services.s3.transfer.TransferManager tm_<%=cid%> = null;
try{
<%
if(isLog4jEnabled){
@@ -42,7 +43,7 @@ imports="
}
%>
com.amazonaws.services.s3.transfer.TransferManager tm_<%=cid%> = com.amazonaws.services.s3.transfer.TransferManagerBuilder
tm_<%=cid%> = com.amazonaws.services.s3.transfer.TransferManagerBuilder
.standard()
.withS3Client(conn_<%=cid%>)
.build();
@@ -81,15 +82,16 @@ imports="
System.err.println(e_<%=cid%>.getMessage());
<%
}
if(!("true").equals(useExistingConn)) {
%>
}finally{
<%if(!("true").equals(useExistingConn)) {%>
if(conn_<%=cid%> !=null){
conn_<%=cid%>.shutdown();
}
<%
}
%>
<%}%>
if(tm_<%=cid%> != null){
tm_<%=cid%>.shutdownNow(false);
}
}
<%}else{%>

View File

@@ -38,6 +38,8 @@ imports="
boolean useStream_<%=cid%> = false;
java.io.InputStream uploadStream_<%=cid%> = null;
com.amazonaws.services.s3.transfer.TransferManager tm_<%=cid%> = null;
try{
<%
if(isLog4jEnabled){
@@ -75,7 +77,7 @@ imports="
long multipart_upload_threshold_<%=cid%> = 5 * 1024 * 1024;
com.amazonaws.services.s3.transfer.TransferManager tm_<%=cid%> = com.amazonaws.services.s3.transfer.TransferManagerBuilder
tm_<%=cid%> = com.amazonaws.services.s3.transfer.TransferManagerBuilder
.standard()
.withMinimumUploadPartSize((long)partSizeInBytes_<%=cid%>)
.withMultipartUploadThreshold(multipart_upload_threshold_<%=cid%>)
@@ -89,6 +91,7 @@ imports="
com.amazonaws.services.s3.transfer.Upload upload_<%=cid%> = tm_<%=cid%>.upload(putRequest_<%=cid%>);
upload_<%=cid%>.waitForCompletion();
} else {
java.io.InputStream sourceStream_<%=cid%> = ((java.io.InputStream)fileOrStream_<%=cid%>);
@@ -193,6 +196,10 @@ imports="
if(useStream_<%=cid%> && uploadStream_<%=cid%>!=null){
uploadStream_<%=cid%>.close();
}
if(tm_<%=cid%> != null){
tm_<%=cid%>.shutdownNow(false);
}
<%
if(!("true").equals(useExistingConn)) {

View File

@@ -38,7 +38,6 @@ String passwordFieldName = "";
<%
if(needSSLtoTrustServer){
%>
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
System.setProperty("javax.net.ssl.trustStore", <%=trustStoreFile %>);
<%

View File

@@ -9,6 +9,7 @@ imports="
org.talend.designer.codegen.config.CodeGeneratorArgument
org.talend.core.model.metadata.types.JavaTypesManager
org.talend.core.model.metadata.types.JavaType
org.talend.core.model.utils.TalendTextUtils
java.util.List
"
%>
@@ -82,7 +83,7 @@ if (inputConnName != null){
}
if(column.getComment()!=null || column.getComment().length()>0){
%>
spVar_<%=i%>.setLabel("<%=column.getComment()%>");
spVar_<%=i%>.setLabel("<%=TalendTextUtils.escapeJavaText(column.getComment())%>");
<%
}
%>

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