2012-09-23 9 views
6

हाय मुझे वेब सेवा मिल गई है और चल रहा है, मैंने जैक्स ws का उपयोग किया है। मैंने स्प्रिंग का उपयोग स्वायत्त और सामान के साथ बीन्स का उपयोग करने में सक्षम होने के लिए किया है जो वसंत एप्लिकेशन कॉन्टैक्ट.एक्सएमएल में संपत्ति मूल्य इंजेक्शन की तरह देता है।जेएक्स डब्ल्यूएस webservice एप्लिकेशन कॉन्टेक्स्ट से वसंत बीन नहीं लेता है, इसलिए शून्य सूचक अपवाद

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

वेब सेवा अंत बिंदु कक्षा में, मैं किया है::

मैं नीचे वसंत applicationcontext.xml प्रविष्टि

@Autowired private MyBeanProperty myProperty; 

और मैं एक विधि है:

public String getSize() { 

return myProperty.getSize(); 

} 

दुर्भाग्य से जब मैं विधि का आह्वान करता हूं तो उसे कोई मूल्य नहीं मिलता है और nullpointerexception फेंकता है।

पीएस: मैंने webservice के wsdl को चलाने के लिए soapUI का उपयोग किया और विधि को बुलाया।

क्या स्प्रिंग द्वारा सेम बनने से पहले webservice चलता है ??


duffmo करने के लिए

हाँ मैं applicationContext में घटक स्कैन का इस्तेमाल किया। और मेरे पास web.xml में नीचे संदर्भ लोडर श्रोता है। कृपया मेरी मदद करो ..

यहाँ कोड

मैं JAX-WS उपयोग कर रहा हूँ और स्प्रिंग के साथ मेरा पूरा कोड explainaton है और स्थापना के लिए कुछ WebServices जो बिलाव 7 पर चलाने की जरूरत है मैं निर्माण के रूप में Maven उपयोग कर रहा हूँ कोशिश उपकरण इसलिए मैं सिर्फ अपनी दो निर्भरता यहां सूचीबद्ध:

<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> 

और यह मेरा धूप में 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> 

यह महान काम करता है और मैं करने के लिए अपने ब्राउज़र इंगित करके सेवाओं का उपयोग कर सकते हैं [ यूआरएल] http://localhost:8080/toolbox/testservice[/url] क्रमशः [यूआरएल] http://localhost:8080/toolbox/helloworldservice[/url]। हालांकि वसंत समर्थन स्पष्ट रूप से सक्रिय नहीं है। 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 टिप्पणी के साथ दोनों सेवा कक्षाएं एनोटेट

मैं जिसके बाद सिर्फ HelloWorldService उपलब्ध लीवर की कोशिश की। जैसा कि मैंने पहले उल्लेख किया था, यह केवल वर्णानुक्रमिक पहले webservice प्रकाशित करता है, इसलिए HelloWorldService। इसके अलावा यह यूआरएल को बदलता है, क्योंकि सेवा अब [url] के रूप में [url] http://localhost:8080/toolbox/helloworldservice[/url] के बजाय उपलब्ध है। टॉमकैट के लॉगिंग से पता चलता है कि वसंत संदर्भ दोनों वर्गों को स्प्रिंग बीन्स के रूप में लोड करता है। क्या आपके पास दोनों सेवाओं को उपलब्ध रखते हुए वसंत समर्थन को सक्षम करने के बारे में कोई विचार या सुझाव हैं ??

उत्तर

0

मुझे लगता है कि यह संभव है कि आपका वसंत संदर्भ लोड नहीं किया गया हो और वेब सेवा के लिए उपलब्ध कराया गया हो। आपने यह कैसे किया है?

आपके पास ContextLoaderListenerweb.xml में WAR के लिए कॉन्फ़िगर किया गया है जिसमें वेब सेवा तैनात की गई है। क्या आपने इसे बताया कि वसंत संदर्भ कहां लोड करना है? क्या आप घटक स्कैन का उपयोग कर रहे हैं?

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

2

आपका TestService (जो @WebService साथ टिप्पणी की जाती है) बाध्यकारी वसंत शुरू किक करने "SpringBeanAutowiringSupport" वर्ग का विस्तार करना चाहिए।

कृपया डफमो उल्लिखित बिंदुओं पर भी एक नज़र डालें।

+0

यह अब बहुत अच्छा काम कर रहा है, धन्यवाद। @Autowired अभी भी काम नहीं किया है लेकिन घटक-स्कैन काम करता है, इसलिए मैंने अनुप्रयोग संदर्भ का उपयोग करने और getBean ("") विधि को कॉल करने के साथ एक काम किया। – Steer360

5

रूप में अच्छी तरह ApplicationContext उपयोग करने के लिए, यदि आप निम्नलिखित बातें कर

  1. @Service के साथ अपनी सेवा वर्ग पर टिप्पणी करें
  2. सेवा वर्ग चाहिए कोई आवश्यकता "SpringBeanAutowiringSupport" फैली हुई है।

कृपया निम्न स्निपेट पर एक नज़र डालें।

<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> 

आशा है कि यह

+0

क्या यह बीन को सिंगलटन या ऑब्जेक्ट प्रति अनुरोध के रूप में बनाएगा? – Zeus

+1

यह सिंगलटन ऑब्जेक्ट – Hemanth

3

मैं इसे हल करने के लिए एक ही मुद्दा है, मैं वसंत श्रोता के बाद jaxws श्रोता शुरू कर दिया गया। आखिरकार सेवा इत्यादि के नीचे कोड जोड़ने के अलावा कुछ भी काम नहीं किया।

@PostConstruct 
public void init() { 
    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 
} 
6

It is answered here मदद करता है:

@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{ 
+0

बनाएगा यह स्वीकार्य उत्तर होना चाहिए। – vault

संबंधित मुद्दे