- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我处境艰难:我们有一个公开基于 Java 的 API 的第 3 方企业系统。然而,我们是一个 100% 面向 .Net 的开发团队。本质上,我需要用 C# 代码可以调用的东西来包装 Java API。
Web 服务会很棒,但我们的基础架构上唯一支持的 Java 应用程序服务器是 WebSphere 6.1。这意味着古老的(已弃用的)JAX-RPC Web 服务框架是我们公开 Web 服务的唯一方式。只是在这里进行简单的概念验证已经是一场噩梦(因为 Java 经验不足,WebSphere 很糟糕,JAX-RPC 很笨拙,还有很多 JAR hell )。
JAVA EE 5 中新的 JAX-WS 2.0 Web 服务框架看起来很棒——有没有办法在没有整个 Java 应用程序服务器的情况下运行它?例如,在 .Net 的 WCF(Windows 通信框架)中,您几乎可以在任何地方托管服务(进程内、Windows 服务、IIS 6/7 等)。
用一些 Web 服务包装这个库的最轻量级方法是什么?
最佳答案
是的。
如果您可以创建一个 Java 方法,该方法 1) 用 @WebMetod 注释 2) 获取所需的参数并调用您的第 3 方代码,并将其包装为 Web 应用程序,您可以使用 Metro 堆栈 - https://metro.dev.java.net/ - 使用任何 Servlet 2.5 Web 容器(将其放在 Web 容器全局 lib 文件夹中)以将上述方法公开为 Web 服务。我们使用的是嵌入式 Jetty,但我已经验证它适用于 Tomcat。
我在 http://archive.midrange.com/java400-l/200904/msg00071.html 中写下了我的发现
我从 https://metro.dev.java.net/1.4/ 下载了 Metro 1.4 (1.5 版本很新,我没看过),最终解压成几个 jar 文件。
将 webservices-api.jar、webservices-rt.jar、webservices-extra-api.jar 和 webservices-extra.jar(四个文件)复制到包含所有 tomcat 通用的“blessed”jar 文件的文件夹中 - 我相信它对于 Tomcat 6 是 ${TOMCAT}/lib。[1]
在您的 Eclipse 项目中最终成为一个 WAR 文件:
如果您的工作区 JRE 是 Java 5,则必须将 webservices-api.jar 添加到类路径中(最后不应部署它)。如果是 Java 6 你应该可以跳过这一步。
创建类 foo.Ping 如下所示:
package foo;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
Ping is a simple web service class providing a "yes, we have contact" class.
Currently the doPing() method provides a response with the host name and
address (if available) and the current server time.
*/
@javax.jws.WebService
public class Ping {
@javax.jws.WebMethod(action = "doPing")
public String doPing() {
System.out.println("Ping.doPing() called.");
String hostName;
try {
hostName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
hostName = "unknown (" + e.getMessage() + ")";
}
String hostAddress;
try {
hostAddress = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
hostAddress = "unknown (" + e.getMessage() + ")";
}
return "Reached '" + hostName + "' (" + hostAddress + ") at "
+ new java.util.Date() + " java.version="
+ System.getProperty("java.version", "(not set)");
}
}
<listener> <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> </listener> <servlet> <description>JAX-WS endpoint - this servlet must handle all endpoints</description> <display-name>webservice</display-name> <servlet-name>webservice</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- each endpoint must have a mapping to the JAX-WS endpoint servlet --> <servlet-mapping> <servlet-name>webservice</servlet-name> <url-pattern>/ws</url-pattern> </servlet-mapping>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'> <endpoint name='ping' implementation='foo.Ping'url-pattern='/ws'> </endpoint </endpoints>
确保 web.xml 和 sun-jaxws.xml 都包含在部署中!
完成!
现在将你的war文件部署到上面准备好的Tomcat中,并在你部署的web应用下打开“/ws”。这可能是 http://localhost:8080/foo/ws
;。这将为您提供一个包含所有 Web 服务(包括 Ping)的 WSDL 链接的信息页面。此链接可直接在任何 WSDL 处理工具中使用,包括 Eclipse IDE 中面向 Java EE 开发人员和 WSDCi 的 Web 服务工具。
希望这对你有帮助:)
[1] 不将它们设为全局会给您带来类加载器问题!
关于c# - 在没有 Java EE 应用程序服务器的情况下使用 Web 服务在 C# 和 Java 之间进行互操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1703951/
我有一个几乎可以构建的Maven / Grails应用,但在web.xml上找不到[my-app]\webapp\WEB-INF\web.xml。但是目录结构像往常一样包含web-app文件夹,而不是
正如我在标题中提到的:我想知道 web-service 和 web-socket 之间的区别?我们什么时候使用每一个? 谢谢! 最佳答案 一个web service是一个响应客户端 SOAP/REST
让我们看一个示例场景: 客户端打开一个网站并找到他从文本框中输入的两个数字的总和。然后单击“添加”按钮。两个参数通过 HTTP GET 发送到服务器,在服务器上写入 PHP 代码以添加数字,结果为回声
我知道这是一个老问题,肯定已经被回答了数百次,但我还无法找到令人满意的答案。 我正在创建一个应用程序,其他应用程序(移动/网络)将使用该应用程序来获取数据。现在我有两个选择: 将我的应用程序创建为简单
通过 Web 作业部署新功能有 3 种方法: 创建一个新的 Web 应用,并部署一个包含该函数的 Web 作业。 向现有 Web 作业添加一项新函数(这样您现在在一个 Web 作业中就拥有了多个函数)
我收到来自网络场景的通知,上面写着“问题”和“确定”。我想在问题发生时包含网络响应的内容。我不担心标题值,只担心网页的内容. 这是我可以在通知设置中引用的变量吗? 最佳答案 不幸的是 zabbix 不
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
嗨,这是一个理论问题,但我真的无法弄清楚 Web 应用程序、基于 Web 的应用程序和基于云的应用程序之间的区别。这个你能帮我吗。 最佳答案 @Matt 是对的 - 这真的无关紧要,但是,为了清楚起见
我正在尝试使用多个 Web 服务,这些服务在它们的 wsdl 中重新定义了一些相同的公共(public)类。我目前在网站中引用了它们,但我想转换为 Web 应用程序。 由于一些相同的类是从多个 Web
一个。我必须考虑哪些事项?b.当前应用程序正在执行多个存储过程。如果我创建等效的方法来执行这些过程,会有什么风险或挑战。 最佳答案 在架构上,将网络应用程序转换为网络服务时必须考虑的一件事是,对方法和
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 5年前关闭。 Improve thi
网络 API 和网络服务之间有什么区别吗?或者它们是同一个吗? 最佳答案 网络服务通常提供 WSDL您可以从中自动创建客户端 stub 。 Web 服务基于 SOAP protocol 。ASP.NE
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我已经获得了我需要的所有资源。我将 Web 服务放入应用程序服务环境中,然后将 NSG 连接到应用程序服务环境使用的子网。然后,我允许 VNET 内的应用程序与 Web 服务进行通信,但它无法正常工作
我正在使用 stub 将我的网络服务相关测试与实际网络服务隔离开来。 你/我应该如何合并测试以确保我制作的响应与实际的网络服务匹配(我无法控制它)? 我不想知道怎么做,而是何时何地? 我应该为测试数据
我在互联网上搜索了很多,但我仍然没有得到网络服务和网络 API 之间的明显区别?我在某处读到所有 Web 服务都是 API,但所有 API 都不是 Web 服务。如何? 我所知道的是两者都允许利用其他
假设我已经完成了使用 JavaEE 制作的 Web 应用程序。这个 Web 应用程序包含登录系统,但最后它是非常基本的 Web 应用程序。我使用的是 GlassFish 3.1.2.2。 我想知道一旦
我希望设计者能够打开与我相同的解决方案文件。这可以通过 Expressions Web 实现吗? 最佳答案 简短的回答是“不”;但这是一个非常常见的请求,我知道很多人都希望下一个版本(无论何时)对此有
我正在尝试在 CF10 中创建一个 Web 服务对象。我已验证它在 SoapUI 中按预期工作。但是,当我在 CF 中运行它时,我得到一个错误,它无法找到在 WSDL 的导入语句中导入的 XSD。这是
我的要求是开发一个 Web 服务,充当外部 Web 服务和客户端之间的中间人。 我知道,我可以为我的服务设计一个wsdl,然后将外部wsdl映射到代码中我的wsdl。我的问题是有一个开源 api/工具
我是一名优秀的程序员,十分优秀!