【发布时间】:2013-07-12 22:29:12
【问题描述】:
有谁知道如何配置它,以便 SOAP 服务和 REST 服务可以在应用程序服务器之外使用 Jersey (Grizzly) 共享同一个端口?
- 我的肥皂服务位于 www.someurl.com:port/soap/crm
- 我的休息服务在 www.someurl.com:port/crm
这些服务共享相同的端口但不同的基本 url,因此应该能够在该端口上并行运行。但是,有一个端口绑定错误..
所有这些都在自定义服务应用程序中,没有 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”
我的肥皂服务接待是这样设置的:
@WebService(targetNamespace = "company.crm")
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class Reception implements ReceptionService {
... methods
}
我的休息服务类像往常一样被注释...
@Path("hello/{username}")
public class Hello { ... }
我在这方面有点新手,任何指针都将不胜感激。请不要打扰建议我运行应用程序服务器。这不是这里的问题 - 问题是我如何解决端口绑定问题而不转移到其他一些 Web 服务框架?
注意赏金:我不能重复这个足够
“赏金获胜者将演示如何在同一端点上同时使用 Jersey for REST 和 Java SOAP 服务(带注释的 JAX-WS)。答案不需要更改 Rest 和 Soap 带注释的类。但是, 并且 HTTP 服务器代码更改或配置更改以使其工作是可以接受的。切换到 Jetty 或其他一些应用程序服务器是不可接受的该解决方案必须 100% 嵌入并使用 Java SE 和 Java Web 服务库运行。”
【问题讨论】:
-
更多信息会有所帮助,例如您使用哪种类型的 Web 服务器/应用程序服务器?
web.xml长什么样子? -
您找到解决方案了吗?我也面临同样的问题
-
不。我仍然将它们分开的端口。我将不得不做很多修改我的代码,我没有时间或耐心。希望以后可以配置。