Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Talend-无法解析导入org.apache_Talend - Fatal编程技术网

Talend-无法解析导入org.apache

Talend-无法解析导入org.apache,talend,Talend,我已经创建了一个定制的Talend组件,它在特定步骤连接到外部Http服务。为此,我通过javajet导入使用org.apache.commons.httpclient。我已经看到模块已经存在于模块视图中。然而,当运行作业时,控制台输出: Execution failed : Failed to generate code. [---------- 1. ERROR in /Users/frb/Downloads/TOS_DI-20160510_1709-V6.2.0/workspace/.JE

我已经创建了一个定制的Talend组件,它在特定步骤连接到外部Http服务。为此,我通过javajet导入使用
org.apache.commons.httpclient
。我已经看到模块已经存在于模块视图中。然而,当运行作业时,控制台输出:

Execution failed : Failed to generate code.
[----------
1. ERROR in /Users/frb/Downloads/TOS_DI-20160510_1709-V6.2.0/workspace/.JETEmitters/src/org/talend/designer/codegen/translators/ngsi/orion/TOrionAppendBeginJava.java (at line 14)
    import org.apache.commons.httpclient.*;
           ^^^^^^^^^^
The import org.apache cannot be resolved
----------
2. ERROR in /Users/frb/Downloads/TOS_DI-20160510_1709-V6.2.0/workspace/.JETEmitters/src/org/talend/designer/codegen/translators/ngsi/orion/TOrionAppendBeginJava.java (at line 15)
    import org.apache.commons.httpclient.methods.*;
           ^^^^^^^^^^
The import org.apache cannot be resolved
----------
3. ERROR in /Users/frb/Downloads/TOS_DI-20160510_1709-V6.2.0/workspace/.JETEmitters/src/org/talend/designer/codegen/translators/ngsi/orion/TOrionAppendBeginJava.java (at line 16)
    import org.apache.commons.httpclient.params.HttpMethodParams;;
           ^^^^^^^^^^
The import org.apache cannot be resolved
----------
3 problems (3 errors)
]
有关于如何解决此问题的提示吗?我的Talend版本是6.2.0

编辑1

这是我的开始代码:

<%@ jet 
    imports="
        org.talend.core.model.process.INode 
        org.talend.core.model.process.ElementParameterParser 
        org.talend.core.model.metadata.IMetadataTable 
        org.talend.core.model.metadata.IMetadataColumn 
        org.talend.core.model.process.IConnection
        org.talend.core.model.process.IConnectionCategory
        org.talend.designer.codegen.config.CodeGeneratorArgument
        org.talend.core.model.metadata.types.JavaTypesManager
        org.talend.core.model.metadata.types.JavaType
        java.util.List
        java.util.Map
        org.apache.commons.httpclient.*
        org.apache.commons.httpclient.methods.*
        org.apache.commons.httpclient.params.HttpMethodParams
    " 
%>
<% 
    // Get the CID
    CodeGeneratorArgument codeGenArgument = (CodeGeneratorArgument) argument;
    INode node = (INode)codeGenArgument.getArgument();
    String cid = node.getUniqueName();

    // Get the component parameters
    String orionEndpoint = ElementParameterParser.getValue(node, "__ORION_ENDPOINT__");
    String authEndpoint = ElementParameterParser.getValue(node, "__AUTH_ENDPOINT__");
    String authUsername = ElementParameterParser.getValue(node, "__AUTH_USERNAME__");
    String authPassword = ElementParameterParser.getValue(node, "__AUTH_PASSWORD__");
    String entityIdField = ElementParameterParser.getValue(node, "__ENTITY_ID_FIELD__");
    String entityTypeField = ElementParameterParser.getValue(node, "__ENTITY_TYPE_FIELD__");
    String defaultEntityType = ElementParameterParser.getValue(node, "__DEFAULT_ENTITY_TYPE__");
    String ignoredFilds = ElementParameterParser.getValue(node, "__IGNORED_FIELDS__");
%>
    System.out.println("I am the begin section");
    HttpClient client = new HttpClient();
    PostMethod method = new PostMethod(<%=authEndpoint%>);
    method.setRequestHeader(new Header("Content-Type", "application/json"));
    method.setRequestBody("{\"username\":\"" + <%=authUsername%> + "\",\"password\":\"" + <%=authPassword%> + "\"}");

    try {
        int statusCode = client.executeMethod(method);

        if (statusCode != HttpStatus.SC_OK) {
            System.err.println("Method failed: " + method.getStatusLine());
        } // if

        byte[] responseBody = method.getResponseBody();
        System.out.println(new String(responseBody));
    } catch (HttpException e) {
      System.err.println("Fatal protocol violation: " + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println("Fatal transport error: " + e.getMessage());
      e.printStackTrace();
    } finally {
      method.releaseConnection();
    } // try

System.out.println(“我是开始部分”);
HttpClient=新的HttpClient();
PostMethod方法=新的PostMethod();
setRequestHeader(新的头(“内容类型”、“应用程序/json”);
方法。setRequestBody(“{\”用户名\“:\”+“\”,\”密码\“:\”+“\”);
试一试{
int statusCode=client.executeMethod(方法);
if(statusCode!=HttpStatus.SC\u OK){
System.err.println(“方法失败:+Method.getStatusLine());
}//如果
byte[]responseBody=method.getResponseBody();
System.out.println(新字符串(responseBody));
}catch(httpe异常){
System.err.println(“致命协议冲突:+e.getMessage());
e、 printStackTrace();
}捕获(IOE异常){
System.err.println(“致命传输错误:+e.getMessage());
e、 printStackTrace();
}最后{
方法。releaseConnection();
}//试试看
编辑2
我已将以下内容添加到我的组件描述符文件中:

<IMPORTS>
  <IMPORT
    NAME="commons-httpclient"
    MODULE="commons-httpclient-3.1.jar"
    REQUIRED="true"
  />
</IMPORTS>

现在,在模块视图中,我可以看到以下内容:

遗憾的是,组件输出了相同的错误

编辑3
删除导入并使用@Balazs Gunics建议的完全限定名后,代码似乎生成了。然而,运行时会出现与commons httpclient相关的一些其他错误:

Starting job job_tOrionAppend at 08:20 21/06/2016.
[statistics] connecting to socket on port 3916
[statistics] connected
I am the begin section
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    at org.apache.commons.httpclient.HttpClient.<clinit>(HttpClient.java:66)
    at iotp_talend_connectors.job_torionappend_0_1.job_tOrionAppend.tMysqlInput_1Process(job_tOrionAppend.java:854)
    at iotp_talend_connectors.job_torionappend_0_1.job_tOrionAppend.tMysqlConnection_1Process(job_tOrionAppend.java:422)
    at iotp_talend_connectors.job_torionappend_0_1.job_tOrionAppend.runJobInTOS(job_tOrionAppend.java:1355)
    at iotp_talend_connectors.job_torionappend_0_1.job_tOrionAppend.main(job_tOrionAppend.java:1212)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
[statistics] disconnected
[statistics] disconnected
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 5 more
Job job_tOrionAppend ended at 08:20 21/06/2016. [exit code=1]
2016年6月21日08:20开始作业。 [统计信息]正在连接端口3916上的套接字 [统计]已连接 我是开始部分 线程“main”java.lang.NoClassDefFoundError中出现异常:org/apache/commons/logging/LogFactory 位于org.apache.commons.httpclient.httpclient.(httpclient.java:66) 在iotp_talend_connectors.job_torionappend_0_1.job_torionappend.tMysqlInput_1进程中(job_torionappend.java:854) 在iotp_talend_connectors.job_torionappend_0_1.job_torionappend.tMysqlConnection_1进程中(job_torionappend.java:422) 在iotp\u talend\u connectors.job\u torionappend\u 0\u 1.job\u torionappend.runjobtos(job\u torionappend.java:1355) 在iotp_talend_connectors.job_torionappend_0_1.job_torionappend.main(job_torionappend.java:1212) 原因:java.lang.ClassNotFoundException:org.apache.commons.logging.LogFactory 在java.net.URLClassLoader$1.run(URLClassLoader.java:372) 在java.net.URLClassLoader$1.run(URLClassLoader.java:361) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.net.URLClassLoader.findClass(URLClassLoader.java:360) 位于java.lang.ClassLoader.loadClass(ClassLoader.java:424) 位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) [统计]断开连接 [统计]断开连接 位于java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 还有5个 工作于2016年6月21日08:20结束。[退出代码=1]
因此,在您的begin.javajet代码中,以下代码将仅为代码生成本身导入这些库。但是您需要将它们添加到生成的代码中。 使用java生成java使监督这一点变得困难

<%@ jet 
    imports="
    org.apache.commons.httpclient.*
    org.apache.commons.httpclient.methods.*
    org.apache.commons.httpclient.params.HttpMethodParams

我认为如果您没有使用模块,jar库就没有链接。顺便说一句,上次导入时有两个分号。我修复了分号问题(我在javajet代码中留下了一个,然后Talend添加了另一个)。遗憾的是,这不是问题所在。我编辑了我的问题,添加了我的代码。谢谢检查xml文件,并添加包含org.apache.commons的jar文件,我用导入信息编辑了我的问题。谢谢你,巴拉兹!谢谢你的回复!我删除了导入,现在我使用完全限定名。代码现在已生成,但出现了其他导入错误,这些错误与我正在使用的commons httpclient类有关。我已经编辑了我的帖子以显示错误。好的,我修复了它。只需在组件描述符文件中添加其他必需的导入:)非常感谢!我很高兴它能工作:)一旦你深入兔子洞,你会发现用java生成java并不像听起来那么容易。此外,我们将代码分为3部分,这使得它更加复杂。
System.out.println("I am the begin section");
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(<%=authEndpoint%>);
System.out.println("I am the begin section");
org.apache.commons.httpclient.HttpClient client =
   new org.apache.commons.httpclient.HttpClient();
org.apache.commons.httpclient.methods.PostMethod method = 
   new org.apache.commons.httpclient.methods.PostMethod(<%=authEndpoint%>);