2

Camel-CXF を使用して、バンドルから Web サービスを公開しています。構成にはブループリントを使用します。私の理解では、この CXF 構成は、指定されたポートで Jetty コネクタを動的に作成し、指定されたパスで CXF サーブレットを公開します。

<cxf:cxfEndpoint id="myEndpoint" address="http://0.0.0.0:${endpoint.port}/${context}" serviceClass="...">
    <cxf:properties>
        <!-- ... -->
    </cxf:properties>
</cxf:cxfEndpoint>

これはうまく機能します。サービス エンドポイントは、指定されたポートとパスで利用できます。

ここで、Tomi Vanek のwsdl-viewerスタイル シートによって変換された元の WSDL を利用できるようにしたいと思います。Pax Web の DefaultResourceMapping を使用して、静的リソースを利用可能にする方法を見つけました。

<bean id="resourceMapping" class="org.ops4j.pax.web.extender.whiteboard.runtime.DefaultResourceMapping">
    <property name="alias" value="/wsdl" />
    <property name="path" value="/wsdl/v4_0" />
</bean>

ただし、これにより、ポート 8181 のデフォルトの Jetty コネクタで WSDL にアクセスできるようになります。私が理解できないのは、リソース マッパーをデフォルト以外のコネクタにバインドする方法です。具体的には、CXF エンドポイント用に動的に作成されたコネクタへ。

4

1 に答える 1

2

2 つのコネクタを区別する必要があります。まず第一に、現在使用している方法で cxf を使用すると、cxf が使用する接続を開く特別な Jetty インスタンスも実行されます。リソース マッピングを通じて、Pax-Web が提供する OSGi HttpService を使用しています。これは、Jetty を基盤となるサーバーとして使用します。そのため、両方が異なるコネクタで実行されています。コネクタを 1 つだけ使用するには、Web サービスを提供するための基盤となるサーバーとして cxf も Pax-Web を使用していることを確認する必要があります。

このために、cxf エンドポイントにコネクタ アドレスがないことを確認します。

<cxf:cxfEndpoint id="myEndpoint" address="/${context}" serviceClass="...">

その後、必要に応じて他のポートを使用するように pax-web を構成できます。
std とは異なるポートを使用する場合。org.ops4j.pax.web.cfgファイルを介して構成を移植する必要があります。

org.osgi.service.http.port=9292

デフォルト コネクタのデフォルト ポートを変更します。さまざまなコネクタの場合、Karaf の etc フォルダーにある jetty.xml を介して、これらの追加のコネクタを追加する必要があります。

<Call name="addConnector">
    <Arg>
        <New class="org.eclipse.jetty.server.ServerConnector">
            <Arg name="server">
                <Ref refid="Server" />
            </Arg>
            <Arg name="factories">
                <Array type="org.eclipse.jetty.server.ConnectionFactory">
                    <Item>
                        <New class="org.eclipse.jetty.server.HttpConnectionFactory">
                            <Arg name="config">
                                <Ref refid="httpConfig" />
                            </Arg>
                        </New>
                    </Item>
                </Array>
            </Arg>
            <Set name="host">
                <Property name="jetty.host" default="localhost" />
            </Set>
            <Set name="port">
                <Property name="jetty.port" default="8282" />
            </Set>
            <Set name="idleTimeout">
                <Property name="http.timeout" default="30000" />
            </Set>
            <Set name="name">jettyConn1</Set>
        </New>
    </Arg>
</Call>

バンドルでは、指定されたコネクタを使用するために次を設定する必要があります。

Web-Connectors: jettyConn1
Web-VirtualHosts: localhost

注意
: Apache Camel を使用しているため、実際にこれを処理するバンドルは独自のバンドルではなく camel/cxf バンドルであるため、このアプローチは機能しません。したがって、これはうまくいきません。

于 2016-01-01T09:07:42.920 に答える