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

The*_*tor 6 java rest soap endpoint

有谁知道如何配置它,以便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);
Run Code Online (Sandbox Code Playgroud)

当我尝试这个时,Grizzly吐出'java.net.BindException:地址已经在使用:bind'

我的肥皂服务接待设置如下:

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

我的休息服务课像往常一样注释......

@Path("hello/{username}")
public class Hello { ... }
Run Code Online (Sandbox Code Playgroud)

我在这方面有点新手,任何指针都会受到赞赏.请不要打扰我建议运行应用程序服务器.这不是问题 - 问题是如何解决端口绑定问题而不转移到其他一些Web服务框架?

注意RE BOUNTY:我不能完全忘记这一点

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

Jun*_*san 2

如果您使用通用容器(例如 tomcat)作为 Web 服务,那么您可以获取到达同一端口的两个服务的请求。您可以将基于 REST 和 SOAP 的服务部署为应用程序的一部分。容器将接受传入请求,并根据应用程序上下文将它们转发给应用程序。在应用程序 web.xml 中,您可以根据请求 URL 映射配置发送请求的位置。