- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
与 JDK6 捆绑在一起的 JAX-WS 实现可用于提供 Web 服务服务器,而无需任何额外的库。 JVM 将从指定端口上的 WS 服务器开始。
https://www.oracle.com/technical-resources/articles/javase/jax-ws-2.html
http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2_pt2/
我的问题是这与 Metro 项目有何不同?如果最终目标是在 tomcat 中托管 Web 服务,那么我是否仍然可以使用捆绑功能然后重定向到这个捆绑的 ws 服务器,还是部署 Metro servlet 更好?
最佳答案
好,
关于 Metro,您必须了解的第一件事是,它是各种 WS 相关项目的总括项目,即。 JAX-WS、JAXB、WSIT、JAX-WS-Commons 等。
这些组件中的每一个都有两部分,API(规范)和称为引用实现 (RI) 的实现部分。
规范在“javax.xml.ws”、“javax.xml.bind”等中定义,RI 在“com.sun.xxx”包中。
现在在 JDK 6 更新 4 附近,sun/oracle 开始将这些 API + RI 捆绑在 JDK 本身中,并通过对 JDK 的更新不断更新这些 API。
截至上次 JDK 6 update31,JDK 包含以下版本的 JAXWS 和 JAXB API,以及 RI
JDK6 u31 - JAXB API @ 2.1 & RI @ 2.1.10、JAXWS API @ 2.1 和 RI @ 2.1.6
现在如果你去 http://jaxb.java.net和 http://jax-ws.java.net页面,并查看 2.1.x 下的最新版本,您将看到 JAXB RI 为 2.1.13,JAXWS RI 为 2.1.7,即与最新 JDK 6 更新捆绑在一起的 2.1 spces 的 RI 实现是在 Metro 下发布的版本后面有几个版本。
因此,要使用最新的 2.1 jar,只需将 API + RI jar 复制到您的类路径,如此处 http://jax-ws.java.net/2.1.7/docs/ReleaseNotes.html#Running_on_top_of_JDK_6 所述。 .
更令人困惑的是,Metro 伞形项目有自己的版本号,截至今天,1.5、2.0、2.0.1、2.1、2.1.1、2.2
Metro 1.5 是捆绑 2.1 spces 和该规范的最新 RI 的最后一个版本,即 Metro 1.5 包含 JAXWS 和 JAXB API @ 2.1、JAXWS RI @ 2.1.7 和 JAXB RI @ 2.1.13。
Metro 2.0 之后,捆绑了 JAXB 和 JAXWS APIs v2.2 以及截至发布数据的最新 RI。
例如最新的 METRO 版本 2.2 捆绑了 JAXB RI 2.2.5 和 JAXWS RI 2.2.6。
但是有一个问题,JDK 6 为 JAXWS 和 JAXB(API + RI)捆绑了 v2.1,如果您只是在类路径中使用 JAXWS 和 JAXB v2.2 jar,它将无法工作。您必须使用认可的 jar 机制,如此处 http://jax-ws.java.net/2.2.3/docs/ReleaseNotes.html#Running_on_top_of_JDK_6 所述.
因此,对于任何 Metro 2.0 及更高版本,您需要复制 $JAVA_HOME/jre/lib/endorsed 下的 jax-ws-api.jar 和 jaxb-api.jar 文件,或使用 -Djava.endorsed.dirs 系统属性(property)。
更有趣的是,Metro 并不是一个包含 jax-ws、jaxb 项目(以及其他项目)的伞形项目,但它也从这些项目中制作了一个 uber jar。
例如,metro 的 webservices-api.jar 包含 jaxws-api.jar 、 jaxb-api.jar (RI) + 来自其他子项目(如 WSIT、jax-ws-commons 等)的 API。
而 webservices-rt.jar 包含 jaxws-rt.jar, jaxb-rt.jar , + 其他子项目如 WSIT, jax-ws-commons 等的 RT jars。
所以总结一下——
如果您想根据 JAXWS/JAXB v2.1 规范开发 WS,只需使用 JDK 6(u04 之后的任何更新)。
如果您想绝对确保使用 2.1 规范的最新 API + RI 版本,只需使用 jaxws 和 jaxb 的最新 2.1.x 版本 jar。即在您的类路径中使用 jax-ws 2.1.7 和 jaxb 2.1.13,[ 或者您可以使用 Metro 1.5 的 webservices-api.jar 和 webservices-rt.jar,因为它们捆绑了 jaxws/jaxb/wsit/。 .]
如果你想根据最新的 JAXWS/JAXB v2.2 规范开发你的 WS,那么你必须使用 jax-ws v2.2.6 和 jaxb ver 2.2.5 jars [或者使用 Metro 2.2 的 webservices-api。 jar 和 webservices-rt.jar,因为它们捆绑了 jaxws/jaxb/wsit..]
但是您必须使用如上所述的背书 jar 机制,以覆盖 jdk 包含的 jaxws/jaxb v2.1 jar。
我的建议 - 如果 v2.1 适合您,请使用 Metro 1.5 jar(webservices-api、webservices-rt)。
如果您需要 v2.2,请使用 Metro 2.2 jar(webservices-api、webservices-rt),并确保将 webservices-api.jar 放在认可的目录中。
如果您要使用诸如 fastinfosets、Mtom 等之类的东西作为 JDK 捆绑的 jar 或仅使用 jaxws-ri.jar 和 jaxb,则需要 Metro jar(webservices-[api,rt].jar)- ri.jar 不会为您提供这些功能。
希望这封相当长的邮件有助于清理一些事情。
关于tomcat - JDK6:何时使用捆绑的 JAX-WS 实现与 Project Metro,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9625547/
我希望在某些环境中使用用户名和密码保护某个角色,但在其他环境中甚至不需要提示。如果我在 tomcat web.xml 中有一个 auth-constraint,我可以创建一个具有“匿名”访问权限的角色
我正在使用 Tomcat jmxproxy 和状态来监视 Web 应用程序,但是 jmxproxy 页面中有很多无用的信息,并且其中没有任何信息,例如事件连接数。有谁知道如何过滤 jmxproxy 页
是否可以通过执行 JSP 来重启 Tomcat6? 这是因为我想通过使用网络服务器远程部署应用程序的更改。 部署脚本是用 bash 编写的,它从 svn 中 check out 最新版本,然后将其打包
我有一个包含 2 个子项目(后端和 ui)的 gradle 项目。 Ui由gradle tomcatRunWar完美启动.后端有我们在生产地点的配置描述符/conf/Catalina/localhos
发现 XAMPP 控件认为 tomcat 正在运行但无法停止它的问题。 在catalina下的tomcat logs目录下可以找到如下错误 “严重:无法联系 localhost:8005。Tomcat
PuppetLabs 在 PuppetForge 上有一个模块,用于部署 Tomcat 及其配置。 https://forge.puppet.com/puppetlabs/tomcat Tomcat
我有一个部署到 Tomcat 实例中的 Web 应用程序。我希望能够将 tomcat 配置为在 Tomcat 本身启动时不自动启动该应用程序。但是,我确实希望启动 Tomcat 管理器,以便我可以根据
操作系统:windows XP。 我已经安装了 Tomcat 7.0.25,文件夹“manager”位于 webapps 文件夹中。 我已阅读此处的文档:http://tomcat.apache.or
我们在 server.xml 文件中启用了以下访问日志模式 pattern="%h %H %l %u %t "%r" %s %b location: %{location}o"。 有人可以帮助理解模式
我最近开始使用 tomcat,我有一个关于 Tomcat 请求路由/映射的查询。 假设我在 tomcat 服务器中部署了四个应用程序 A、B、C 和 D,当有请求到来时,tomcat 如何知道要调用哪
我在我的计算机上使用 Tomcat,它可以通过端口 8080 访问。我想要的是我应该能够使用我的计算机的 IP 地址访问我的 Tomcat 服务器页面。我以前读过很多主题,但找不到一个可以帮助我的主题
我有一个 tomcat 7 服务器和一个 postgreSQL 9.0 数据库。我用它来为地理网络元数据编辑器设置开发环境。一切都是根据 geonetwork 网站教程设置的。我在将服务器与数据库连接
我的服务器有 物理 ip 和 虚拟 ip 由网络管理员设置。在我安装的服务器内部 Apache tomcat 7.0.29并创建一个网络应用程序。当我运行 wget http://:8080/xxx或
我有多个应用程序在不同的端口上运行(tomcat 实例) 都有相同的CATALINA_HOME 目前我必须在所有实例中部署和安装psi 探针,并在不同的窗口中分别监控每个端口。 我如何在一个单一的探测
based on this question 我尝试将 Tomcat 控制台输出重定向到一个文本文件,它对我的 Web 应用程序工作正常,但问题是,每次 Tomcat 启动时它都会被覆盖。我需要创
我需要阐明我的问题。问题是:有什么方法可以影响 Tomcat 为特定部署的应用程序分配多少堆内存?更多详细信息 - 我如何为已部署的应用程序设置特定的 Java 选项(考虑我想为每个应用程序设置特殊的
应用服务器内部的类加载机制是开发人员常见的困惑来源;这就是为什么我想问一个关于 tomcat 7 服务器中这个机制的问题:我有一个网络应用程序 sample.war,它依赖于 jgroups 库, 放
尝试将嵌入式 Tomcat 5 迁移到嵌入式 Tomcat 7。在启动过程中获取 NPE。 我扩展了 Embedded 类并按照正确的顺序执行所有建议的初始化。 NPE 发生在这里: Caused b
我可以使用随附的 start.sh 文件启动 tomcat,但是是否有任何参数可以用来执行以下操作: 在指定的根目录启动 Tomcat 服务 强制 Tomcat 在浏览器中拉出指定的主页 谢谢 最佳答
我在两台 diff 机器 tomcat 服务器上做一个简单的集群配置。每次我启动 tomcat 时,我都会收到一个错误,就像集群组中没有事件成员一样。我正在附加集群配置
我是一名优秀的程序员,十分优秀!