Compare commits
74 Commits
dchmyga/TD
...
tkaczynski
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d22857994 | ||
|
|
d10e0a7776 | ||
|
|
fed318cea2 | ||
|
|
b42c990006 | ||
|
|
99b32aef61 | ||
|
|
1aff5b8292 | ||
|
|
aa502fbbda | ||
|
|
bb6eaa5c43 | ||
|
|
c3f90750df | ||
|
|
89402325e7 | ||
|
|
a6c3a11e54 | ||
|
|
f96f3171d1 | ||
|
|
76b1eb7da6 | ||
|
|
894ca53e5a | ||
|
|
4bc344bec5 | ||
|
|
69a9e3ca83 | ||
|
|
896bed8875 | ||
|
|
bd3301dc51 | ||
|
|
c71b2f994f | ||
|
|
04be41abf8 | ||
|
|
4b99b199cc | ||
|
|
48882724ac | ||
|
|
7b05a057b0 | ||
|
|
437df1c3c5 | ||
|
|
0742691497 | ||
|
|
99951891e9 | ||
|
|
7e3c8888e1 | ||
|
|
5745ce1d28 | ||
|
|
c23955d51f | ||
|
|
77aa27ccac | ||
|
|
e0310bfb60 | ||
|
|
0f323ab700 | ||
|
|
718a5d005e | ||
|
|
8fa59aefe9 | ||
|
|
a5f43e31e6 | ||
|
|
18fc81a240 | ||
|
|
68836af2d3 | ||
|
|
2538b24196 | ||
|
|
7255747144 | ||
|
|
f0bc81e9b6 | ||
|
|
d553d5ed06 | ||
|
|
f5b2456c9f | ||
|
|
7f045834e5 | ||
|
|
899eab4a2b | ||
|
|
d2d3a37b41 | ||
|
|
c42ccb1fe4 | ||
|
|
d66773ec0d | ||
|
|
ce310ab73f | ||
|
|
9e88f2c2c8 | ||
|
|
3c1664b5a6 | ||
|
|
31beed6bc8 | ||
|
|
b0fa04eba8 | ||
|
|
a67fd68b79 | ||
|
|
0415268aeb | ||
|
|
c2f52f2acc | ||
|
|
654e035974 | ||
|
|
37adcec242 | ||
|
|
b6323e92b5 | ||
|
|
e973624d17 | ||
|
|
732f041e0e | ||
|
|
d2b24287ef | ||
|
|
67b1f5f63e | ||
|
|
2ed16b7e8e | ||
|
|
b499d3432b | ||
|
|
bc66eff728 | ||
|
|
3539b4ce03 | ||
|
|
47082201e6 | ||
|
|
8632fd8cb3 | ||
|
|
a576d88ecd | ||
|
|
a4c9e0b7ee | ||
|
|
84e6601675 | ||
|
|
3282e07d77 | ||
|
|
673ed49d61 | ||
|
|
b5121333e4 |
@@ -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"/>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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() + "/";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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$
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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()]);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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, "_");
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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}
|
||||
@@ -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
|
||||
@@ -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}
|
||||
@@ -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}
|
||||
@@ -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}
|
||||
@@ -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>
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
%>
|
||||
%>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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());
|
||||
|
||||
<%
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
<%
|
||||
}
|
||||
|
||||
@@ -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')">
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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");<%}%>
|
||||
|
||||
@@ -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());
|
||||
<%
|
||||
|
||||
@@ -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 %>);
|
||||
<%
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
Binary file not shown.
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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') " />
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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')" />
|
||||
|
||||
@@ -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')" />
|
||||
|
||||
@@ -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 %> + "");
|
||||
|
||||
@@ -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:");
|
||||
<%
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:");
|
||||
<%
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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{%>
|
||||
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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 %>);
|
||||
|
||||
<%
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user