LINUX.ORG.RU

JAX-WS через Spring - не работают DI?

 bean, , ,


0

1

jaxws-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:ws="http://jax-ws.dev.java.net/spring/core"
       xmlns:wss="http://jax-ws.dev.java.net/spring/servlet"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
		                   http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://jax-ws.dev.java.net/spring/core
                           http://jax-ws.dev.java.net/spring/core.xsd
                           http://jax-ws.dev.java.net/spring/servlet
                           http://jax-ws.dev.java.net/spring/servlet.xsd"
>

    <wss:binding url="/ws/checkLicense">
        <wss:service>
            <ws:service bean="#checkLicenseWS"/>
        </wss:service>
    </wss:binding>


    <!-- Web service methods -->
    <bean id="checkLicenseWS" class="ru.bvn13.licenseserverj.web.ws.CheckLicenseWS">
        <property name="checker" ref="licenseChecker"/>
    </bean>

    <bean id="licenseChecker" class="ru.bvn13.licenseserverj.LicenseChecker">
        <property name="db" ref="database"/>
    </bean>

    <bean id="database" class="ru.bvn13.licenseserverj.Database" scope="singleton">

    </bean>

    <bean id="test" class="ru.bvn13.licenseserverj.TestBean"/>

</beans>

web.xml


    <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>jaxws</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-name>
        <url-pattern>/ws/checkLicense</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>120</session-timeout>
    </session-config>


без файла sun-jaxws.xml вообще ws не работают:

<?xml version="1.0" encoding="UTF-8"?>
<endpoints
        xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
        version="2.0"
>
    <endpoint
            name="checkLicenseWS"
            implementation="ru.bvn13.licenseserverj.web.ws.CheckLicenseWS"
            url-pattern="/ws/checkLicense"/>

</endpoints>

В чем дело?

★★★★★
Ответ на: комментарий от bvn13

а с чего ты решил, что файл jaxws-servlet вообще должен кем-то дергаться? Или там какой-то фреймворк? Давай ссылку на туториал, из которого копипастишь :)

stevejobs ★★★★☆
()
Ответ на: комментарий от bvn13

просто загугли «jax-ws spring integration example», там есть и готовый список действий, и готовые проекты на гитхабе, сразу в топе гугля

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

вот смотри, что моя ссылка выше (mkyong), что вот эта: https://examples.javacodegeeks.com/enterprise-java/jws/jax-ws-spring-integrat...

Я так понял, весь смысл в отказе от файла sun-jaxws.xml в том, чтобы инициализировать сервлет с классом com.sun.xml.ws.transport.http.servlet.WSSpringServlet и спринговым листенером org.springframework.web.context.ContextLoaderListener.

Но в таком случае у меня вопрос: если я хочу в одном приложении поднять обычный спринг-сервлет на урл /* и jax-ws на /ws/*, как мне это настроить?

Если я делаю, как в этих туторах, то у меня WSSpringServlet в листенере ContextLoaderListener вообще не поднимается.

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от Rastafarra

не работает то, что я написал в сабже - dep.injection в бинах.

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от stevejobs

Опишу все подробней позже.

Сейчас другой вопрос. Как правильно настроить адрес в soap, чтобы был не локалхост?

Вот так задаю endpoint:

    <jaxws:endpoint id="checkLicenseWSEndpoint"
                    implementor="#checkLicenseWS"
                    address="/" />

А так сервлет:

    <servlet>
        <servlet-name>jaxws</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
        <load-on-startup>2</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jaxws</servlet-name>
        <url-pattern>/ws/checkLicense</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>120</session-timeout>
    </session-config>

При генерации с помощью


            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-java2ws-plugin</artifactId>
                <version>${cxf.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.cxf</groupId>
                        <artifactId>cxf-rt-frontend-jaxws</artifactId>
                        <version>${cxf.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>generate-wsdl</id>
                        <phase>process-classes</phase>
                        <configuration>
                            <className>ru.bvn13.licenseserverj.web.ws.CheckLicenseWS</className>
                            <classpath>${basedir}/src/main/java/</classpath>
                            <outputFile>web/WEB-INF/wsdl/LicenseServerJ.wsdl</outputFile>
                            <genWsdl>true</genWsdl>
                            <verbose>true</verbose>
                            <address>http://licenseserverj.cf/ws/checkLicense</address>
                        </configuration>
                        <goals>
                            <goal>java2ws</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

Получается вот так:

  <wsdl:service name="CheckLicenseWSService">
    <wsdl:port name="SOAPOverHTTP" binding="tns:CheckLicenseWSServiceSoapBinding">
      <soap:address location="http://licenseserverj.cf/ws/checkLicense"/>
    </wsdl:port>
  </wsdl:service>

И это норм. Но когда я в браузере дергаю урл http://localhost:8888/ws/checkLicense?wsdl , то там стоит:

<wsdl:service name="CheckLicenseWSService">
<wsdl:port binding="tns:CheckLicenseWSServiceSoapBinding" name="SOAPOverHTTP">
<soap:address location="http://localhost:8888/ws/checkLicense"/>
</wsdl:port>
</wsdl:service>
хоть убей...

bvn13 ★★★★★
() автор топика
Ответ на: комментарий от stevejobs

это как бы локалхост. на 80 порту nginx должен проксировать на этот сервис.

обратиться

где обратиться?

bvn13 ★★★★★
() автор топика
Последнее исправление: bvn13 (всего исправлений: 1)
Ответ на: комментарий от stevejobs

Я понял, про что ты. Да. Я прописал в hosts:

127.0.0.1 licenseserverj.cf

дергаю урл http://licenseserverj.cf:8888/ws/checkLicense?WSDL, получаю:

<wsdl:service name="CheckLicenseWSService">
<wsdl:port binding="tns:CheckLicenseWSServiceSoapBinding" name="SOAPOverHTTP">
<soap:address location="http://licenseserverj.cf:8888/ws/checkLicense"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

надо как-то адрес сервера в nginx тоже проксировать.

UPD:

    proxy_set_header Host            $host;
    proxy_set_header X-Forwarded-For $remote_addr;

помогло.

bvn13 ★★★★★
() автор топика
Последнее исправление: bvn13 (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.