1

我正在尝试构建一个基于轴的 Web 服务,并为安全性提供壁垒,并且我一直希望将单一战争部署到 tomcat,而不是安装轴并在轴内部署。(不过,我并没有固定在这一点上……这对我来说是全新的领域,所以我可以使用您可能拥有的任何反馈。)

我遇到了一些问题:

  • mvn jetty:run 工作正常 - 我可以使用 Web 服务,并通过点击我的服务的 url 来检索 wsdl,并在末尾添加 ?wsdl(例如: http://localhost:8080/webservice/services/ResultService?wsdl "webservice"是这个项目的名称),但是,mvn jetty:run-war 失败,除非我先手动将rampart-1.4.mar 和rahas-1.4.mar 手动复制到WEB-INF/lib 目录中。如果没有这样做,那么 jetty:run-war 会产生一系列关于壁垒模块不可用的异常,并且点击与上面相同的 wsdl url 会返回一个空页面。(根本没有内容,当它应该是一大块 wsdl 时)这里是堆栈跟踪:http://hpaste.org/fastcgi/hpaste.fcgi/view?id=12058# a12058

  • 无论生成的战争中 mar 文件的位置如何,我都无法让 tomcat 正确地为 Web 服务提供服务。它不会向日志发出任何注意事项(只是部署 Web 应用程序的信息),并且没有为上述 url 提供任何 wsdl。 http://localhost:8180/infoassist/services/ResultService?wsdl什么也不返回。('infoassist.war' 是生成的战争的名称,因此与码头不同的 url)

如果我查询一个不以 ?wsdl 结尾的 url,那么我会在浏览器中得到一个轴异常。这可能很好——即使在运行功能性 jetty:run 服务器时也会发生这种情况,而且我不希望在浏览器中出现“真正的”输出,因为到目前为止我所做的一切都只是为了测试 soap。它确实表明axis正在与Tomcat一起使用,因此至少有一些战争依赖项正在工作:

org.apache.axis2.AxisFault: The service cannot be found for the
endpoint reference (EPR) /infoassist/ at
org.apache.axis2.engine.DispatchPhase.checkPostConditions(DispatchPhase.java:65)
at org.apache.axis2.engine.Phase.invoke(Phase.java:334) at
org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:251) at
org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:160) at
org.apache.axis2.transport.http.util.RESTUtil.invokeAxisEngine(RESTUtil.java:135)
at org.apache.axis2.transport.http.util.RESTUtil.processURLRequest(RESTUtil.java:130)
at org.apache.axis2.transport.http.AxisServlet$RestRequestProcessor.processURLRequest(AxisServlet.java:838)
at org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:262)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Thread.java:595)

我真的在这里抓住了稻草 - 任何帮助将不胜感激,当然,我可以提供更多细节,我只是不知道会有什么用。

4

2 回答 2

1

问题后是建议。

问:您是通过 eclipse 生成 WSDL 的吗?如果是这样,您是否确保它是正确版本的 Axis?

S:我会把所有东西都放到 EAR 中,我相信 tomcat 支持它。EAR 是可以容纳多个 WAR 和 JAR 的目录

于 2009-11-12T00:27:59.977 回答
1

在各种来源的大力帮助下,我想通了:

第一的,

请遵循以下说明:

但是,在构建轴战时,您必须首先调整构建,以便不从存档中排除axis2-codegen-1.5.jar 按照此处的说明:

要在 Axis2 服务器安装中使用 Rampart 代码,您需要创建一个新的 axis2.war 文件,该文件包含添加的 Rampart .jar 和 .mar 文件。您可以使用 webapp 目录中提供的 Ant build.xml 来创建axis2.war,前提是您进行一项更改:删除文件末尾附近的<exclude name="axis2-codegen*.jar"/> 行。然后打开 Axis2 webapp 目录的控制台并运行ant. build.xml 运行后,您可以在 Axis2 安装 dist 目录中找到创建的axis2.war Web 应用程序。

这应该足以在轴管理页面(可能位于http://localhost:8080/axis2/axis2-admin/listModules的加载模块列表中看到壁垒。但是,如果您使用的是这些库(轴/壁垒),您还必须注意将代码编译为与 1.5 兼容的 java 类规范。我没有这样做,所以我一直遇到java.lang.UnsupportedClassVersionError错误,但没有什么能弄清楚实际上是什么导致问题 - 我怀疑axis2-codegen-1.5.jar,这是一个红鲱鱼 - 问题实际上与我编译的类文件的字节码版本有关。当我从分发中构建壁垒样本时也发生了这种情况,因为它们以源代码形式分发,我的默认编译器是 java 1.6。

于 2009-11-13T01:01:28.747 回答