在eclipse中运行junit时,一切正常。当我将我的jar部署到Oracle Serviec总线并通过代理调用它时,我遇到了问题。
我的jar使用httpClient& httpCore,httpClient也对httpCore有一些依赖。当httpclient引用httpcore而没有从我的jar中引用时,就会出现问题。我已经证明,通过编辑httpclient的清单来获取httpcore jar,外部jar引用另一个jar。如果我这样做,一切正常,但我不想像你期望的那样手动编辑外部罐子!
我的清单有这个类路径集: 类路径:httpcore-4.3.jar httpclient-4.3.1.jar DatabaseUtil-1.0.jar commons-codec-1.8.jar
我正在努力将jar添加到服务器的类路径中,我认为这样可行,但检查是否有另一种方法来执行此操作,因为有其他服务/ jar使用相同的jvm。我在下面复制了一个测试类来显示问题证明
非常感谢任何帮助。
谢谢, 丹尼尔。
public class CheckHTTPJars {
public static String checkHttpJarsLoaded()
{
try {
System.out.println("Starting...");
System.out.println("classpath: " + System.getProperty("java.class.path"));
HttpHost host = new HttpHost("test");
System.out.println("Hit HTTPCore... ");
BasicResponseHandler b = new BasicResponseHandler();
System.out.println("Hit HTTPClient... ");
HttpGet get = new HttpGet();
System.out.println("Hit HTTPClient but referencing HttpCore... ");
HttpRequest h = null;
System.out.println("Hit HTTPCore... ");
return("Passed");
} catch (Exception e) {
return (e.getMessage());
}
}
}
答案 0 :(得分:1)
您使用的是OSB java callout活动吗?
您是否未找到班级(或其他例外)?
什么是DatabaseUtil-1.0.jar,它是您制作并在标注中使用的吗?
我认为在这个答案中对这些问题的回答是正确的。
您需要两个(未修改的)罐子才能使代码正常工作。
如果您不想将两个jar放在服务器类路径中(Oracle推荐用于常见工件),则可以将这些jar包装在callout中使用的自定义jar中。这可能是好的(取决于用例),因为两个罐总共约1MB。见How can I create an executable JAR with dependencies using Maven?
记住你需要commons-codec和其他一些依赖项,检查http://mvnrepository.com/是否有完整列表。
答案 1 :(得分:0)
最后我坚持使用Ant并使用了zipgroupfileset标签。这会将外部jar类捆绑到jar中。这有点乱,因为它正在提取类并将它们复制到你的jar而不是捆绑罐子。我敢肯定有一种方法来捆绑罐子和可能来自arkonautom的maven解决方案(谢谢你的方式)将为你做这件事(我没有时间,所以从来没有尝试过)。
我提出的其他解决方案 - 将jar复制到$ domain / lib文件夹。这也有效,但发现我还必须将jar文件部署到文件夹中,否则我的java callout出现问题时看不到代码。我没有花时间调查 - 使用java.net URLConnection重写代码。这也有效,但在本地运行时遇到了授权问题,所以最终决定反对它。
希望这有助于其他人...
<zipgroupfileset dir="lib">
<include name="httpclient-4.3.1.jar"/>
<include name="httpcore-4.3.jar"/>
<include name="commons-codec-1.8.jar"/>
</zipgroupfileset>