6

こんにちは、Web サービスを起動して実行しています。jax ws を使用しました。私は Spring を使用して、Autowired で Bean を使用できるようにし、Spring が applicationContext.xml のプロパティ値の注入のように提供するものを使用しました。

以下の spring applicationcontext.xml エントリがあります。

<context:component-scan base-package="com.mybeans.service" />      
<bean  id="myProperty" class="com.mybeans.service.MyBeanProperty"
p:Size="BIG">
</bean>

Web サービス エンドポイント クラスでは、次のことを行いました。

@Autowired private MyBeanProperty myProperty;

そして、私には方法があります:

public String getSize() {

return myProperty.getSize();

}

残念ながら、メソッドを呼び出すと、値が取得されず、nullpointerexception がスローされます。

PS: SOAPUI を使用して Web サービスの wsdl を実行し、メソッドを呼び出しました。

Bean が Spring によって作成される前に Web サービスが実行されますか??


ダフモへ

はい、applicationContext でコンポーネント スキャンを使用しました。そして、web.xmlに以下のようなコンテキストローダーリスナーがあります。私を助けてください..

ここにコードを含む私の完全なコードの説明があります

私は JAX-WS と Spring を使用しており、Tomcat 7 で実行する必要があるいくつかの WebServices をセットアップしようとしています。ビルド ツールとして Maven を使用しているため、2 つの依存関係をここにリストします。

<dependencies>
   <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>3.0.5.RELEASE</version>
   </dependency>

     <dependencies>
    <dependency>
      <groupId>com.sun.xml.ws</groupId>
      <artifactId>jaxws-rt</artifactId>
      <version>2.1.3</version>
    </dependency>

    </dependencies>

私のサービスクラスは com.test.services にあり、名前は TestService & HelloWorldService で、次のようになります。

package com.test.services;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService( name = "Test", serviceName = "TestService" )
public class TestService {

  @WebMethod
  public String getTest() {
    return "Test";
  }

}

これは私のweb.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>toolbox</display-name>
  <description>testing webservices</description>
  <listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>jaxws-servlet</servlet-name>
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>jaxws-servlet</servlet-name>
    <url-pattern>/testservice</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>jaxws-servlet</servlet-name>
    <url-pattern>/helloworldservice</url-pattern>
  </servlet-mapping>
  <session-config>
    <session-timeout>10</session-timeout>
  </session-config>
</web-app>

これは私のsun-jaxws.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
    <endpoint
        name="jaxws-servlet"
        implementation="com.test.services.TestService"
        url-pattern="/testservice"/>
    <endpoint
        name="jaxws-servlet"
        implementation="com.test.services.HelloWorldService"
        url-pattern="/helloworldservice" />
</endpoints>

これはうまく機能し、ブラウザで [url] http://localhost:8080/toolbox/testservice[/url]を指定してサービスにアクセスできます[url] http://localhost:8080/toolbox/helloworldservice[/url ] ] . ただし、Spring サポートは明らかにアクティブ化されていません。

私は次のことを試しましたが、これは HelloWorldService を利用可能にするだけです: web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>toolbox</display-name>
  <session-config>
    <session-timeout>30</session-timeout>
  </session-config>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
</web-app>

および applicationContext.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
  xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:task="http://www.springframework.org/schema/task"
  xsi:schemaLocation="
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">
  <context:component-scan base-package="com.test.services" />
  <bean class="org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter">
    <property name="baseAddress" value="http://localhost:8080/" />
  </bean>
 </beans>

さらに、両方の Service クラスに @Service アノテーションを付けました。前に述べたように、これはアルファベット順で最初の Web サービス、つまり HelloWorldService のみを公開します。また、サービスが [url] http://localhost:8080/toolbox/helloworldservice[/ url]ではなく [url ] http://localhost:8080/[/url]として利用できるようになったため、URL も変更されます。Tomcat のロギングは、Spring コンテキストが両方のクラスを Spring Bean としてロードすることを示しています。両方のサービスを利用可能にしながら、Spring サポートを有効にする方法について何かアイデアや提案はありますか??

4

6 に答える 6

6

ここに答えがあります。最終的に、以下のコードをサービス impl に追加する以外に何も機能しませんでした。

    @PostConstruct
public void init() {
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
于 2013-12-01T16:08:19.867 に答える
5

次のことを行う場合、ApplicationContextも使用する必要はありません

  1. @Service でサービス クラスに注釈を付ける
  2. サービスクラスは「SpringBeanAutowiringSupport」を拡張する必要があります。

次のスニペットをご覧ください。

@org.springframework.stereotype.Service
@javax.jws.WebService (endpointInterface="a.b.c.MyPort", 
            targetNamespace="http://a.b.co.in/Retail/MyService/V1", 
            serviceName="MyService", 
            portName="MyServicePort", 
            wsdlLocation="wsdl/MyService.wsdl")
public class MyServiceBindingImpl extends org.springframework.web.context.support.SpringBeanAutowiringSupport{
于 2012-10-02T09:45:01.733 に答える
3

同じ問題が発生しました。解決するために、スプリングリスナーの後にjaxwsリスナーを開始しました。

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
     <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>

それが役に立てば幸い

于 2013-01-21T10:44:13.893 に答える
2

TestService (@WebService で注釈が付けられている) は、「SpringBeanAutowiringSupport」クラスを拡張して、Spring バインディングを開始する必要があります。

ダフモが挙げたポイントも合わせてご覧ください。

于 2012-09-25T14:23:40.503 に答える
0

Spring コンテキストがロードされておらず、Web サービスで利用できるようになっていない可能性が高いと思います。どうやってそれをしましたか?

Web サービスが展開されている WAR に をContextLoaderListener設定する必要があります。web.xmlSpring コンテキストをロードする場所を指定しましたか? コンポーネントスキャンを使用していますか?

http://renidev.wordpress.com/2009/02/02/how-to-use-springs-context-component-scan-and-annotation/

于 2012-09-23T19:52:50.273 に答える
0

webservice inject の設定がありません。だから web.xml の中にもっと入れてください

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
    <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>

順番をお忘れなく。最初に自動配線されたフィールドの Bean を初期化する必要があるため

ありがとう

于 2019-08-16T02:27:02.353 に答える