gpt4 book ai didi

java - 如何在同一端口托管 SOAP 服务和 REST 服务?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:12 24 4
gpt4 key购买 nike

有谁知道如何配置它以便 SOAP 服务和 REST 服务可以在应用程序服务器之外使用 Jersey (Grizzly) 共享同一个端口?

  • 我的 SOAP 服务位于 www.someurl.com:port/soap/crm
  • 我的休息服务在 www.someurl.com:port/crm

这些服务共享同一个端口但不是同一个基本 url,因此应该能够在该端口上并排运行。但是,有一个端口绑定(bind)错误..

所有这些都在自定义服务应用程序中,没有 web.xml 等。

REST 服务使用 Jersey,Soap 服务是在端点上发布的“ReceptionService”类。

URI soapUri = URI.create("192.168.0.0:1234\soap\Crm")
URI restUri = URI.create("192.168.0.0:1234\crm")

// START SOAP SERVICE
Object reception = getObjectResource(ReceptionService.class);
Endpoint e = Endpoint.publish(soapUri, reception);

// START REST SERVICE
ResourceConfig rc = new ResourceConfig().packages("company.rest");
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(restUri, rc);

当我尝试这个时,Grizzly 吐出“java.net.BindException: Address already in use: bind”

我的 SOAP 服务接待是这样设置的:

    @WebService(targetNamespace = "company.crm")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class Reception implements ReceptionService {
... methods
}

我的休息服务类(class)像往常一样被注释......

@Path("hello/{username}")
public class Hello { ... }

我在这方面有点新手,如果有任何指点,我们将不胜感激。请不要建议我运行应用程序服务器。这不是这里的问题——问题是我如何在不转移到其他 Web 服务框架的情况下解决端口绑定(bind)问题?

注意 RE BOUNTY:我无法对此进行足够的迭代

“赏金获得者将演示如何在同一端点上将 Jersey for REST 和 Java SOAP 服务(注释为 JAX-WS)一起使用。答案不需要更改 Rest 和 Soap 注释类。但是和 HTTP 服务器代码更改或配置更改以使其正常工作是可以接受的。切换到 Jetty 或其他一些应用程序服务器是 Not Acceptable 解决方案必须是 100% 嵌入式并使用 Java SE 和 Java Web 服务库运行。”

最佳答案

Jetty 的叠加功能允许您在同一 Jetty 实例/端口上部署两个具有不同路径的不同 Web 应用。

您将拥有一个带有 Jersey servlet(用于 REST)的 web.xml 和另一个带有 SOAP servlet 的 web.xml。

http://www.eclipse.org/jetty/documentation/current/overlay-deployer.html

关于java - 如何在同一端口托管 SOAP 服务和 REST 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17647793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com