我一直在尝试在 Weblogic 服务器上部署 JAX-WS 服务,如此链接 Creating a Simple HelloWorld Web Service 中所示. 我已经部署了它,发现它工作得很好。
现在我还想在调用此服务时将数据写入日志文件。为此,我正在使用 log4j。这就是我尝试修改链接中代码的方式。
package examples.webservices.hello_world;
import javax.jws.WebService;
import org.apache.log4j.Logger;
@WebService(name="HelloWorldPortType", serviceName="HelloWorldService")
public class HelloWorldImpl {
public static Logger log = Logger.getLogger(HelloWorldImpl.class);
public String sayHelloWorld(String message) {
try {
log.info("Start");
System.out.println("sayHelloWorld:" + message);
} catch (Exception ex) { ex.printStackTrace(); }
return "Here is the message: '" + message + "'";
}
}
我已经在 CLASSPATH
变量中设置了 log4j-1.2.8.jar
文件的路径。
但是当我尝试构建 Web 服务时,它出错了,说 java.lang.ClassNotFoundException: org.apache.log4j.Logger
。
我使用的是与链接中给出的相同的 build.xml
文件。 build.xml
文件中是否需要任何修改?我应该把 log4j.properties 文件放在哪里?感谢您的帮助。
最佳答案
即使设置了类路径,这个问题也必须是,因为 weblogic 无法在运行时找到 log4j。更具体地说,war 的 Classloader 无法找到 log4j。
以下是解决问题的方法:
- 如果您实际上在 WAR 中捆绑了
log4j
,请检查您的 build.xml。 - 转到autodeploy目录,将war文件复制到不同的位置,将其解压并检查
WEB-INF/lib
是否存在,并检查log4j是否确实存在 - 检查类路径中是否有多个 log4j 版本。
最后,在 weblogic 中部署一组可重用 jar 的首选方法是 shared library并通过 weblogic.xml
引用它。
它有助于:
- 避免在不同的 war 中重复捆绑 jar 文件。
- 确保您的所有部署都简化为首选版本 图书馆。
关于java - 在 weblogic 上登录 web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16061939/