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 サービス ライブラリを使用して実行される必要があります。」