0

Spring マネージド Bean を使用して Jersey 2.7 リソースを挿入しようとしています。具体的には、次のように Spring Bean 内にOAuth1Signatureを注入したいと考えています。

@Component
public class OAuthManager {

    @Inject
    private OAuth1Signature oAuthSignature;

    private void someMethod() {
        String signature = oAuthSignature.generate(oauthRequest, params, secrets);
    }
}


HK2 Spring 統合ドキュメント内で提供されている手順を使用してみました: HK2 Spring Integration。ドキュメントに従って、これをSpring xml構成に追加しました。

<bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
    <property name="scopes">
        <map>
            <entry key="hk2">
                <bean class="org.jvnet.hk2.spring.bridge.api.SpringScopeImpl" >
                  <property name="ServiceLocatorName" value="HK2ToSpringTest" />
                </bean>
            </entry>
        </map>
    </property>
</bean>

<bean id="org.glassfish.jersey.oauth1.signature.OAuth1Signature"
      class="org.glassfish.jersey.oauth1.signature.OAuth1Signature"
      scope="hk2" 
      lazy-init="true" />


ただし、webapp を起動すると、次の例外が発生し続けます。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching       bean of type [org.glassfish.hk2.api.ServiceLocator] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:952)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:821)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:795)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:723)


OAuth1Signature のドキュメントには、Jersey 2.7 が使用する HK2 フレームワークによって ServiceLocator が注入されることになっていると記載されています。サービスロケーターがどこから来るべきかわからないように見えるため、jersey-spring3ブリッジを使用してSpringにOAuth1Signatureをインスタンス化させる方法について非常に混乱しています。

私は StackOverflow や他の Jersey メッセージ ボードを検索してみましたが、それらのほとんどは逆のユース ケース (Jersey リソースに Spring Bean を注入する) を扱っています。これに関する助けがあれば大歓迎です!

4

1 に答える 1