2011-08-18 33 views
0

WEB服務問題大家好
我試圖揭露春天webservice的我面臨的一個問題,我的服務對象沒有被初始化
------------- --end點類--------------

春天 - 在實例化

import org.springframework.ws.server.endpoint.AbstractMarshallingPayloadEndpoint; 

import com.mt.service.CalculatorService; 

public abstract class AbstractCalculatorEndpoint extends AbstractMarshallingPayloadEndpoint { 
    protected CalculatorService calculatorService; 

    public void setCalcService(CalculatorService calculatorService) { 
     this.calculatorService = calculatorService; 
    } 

    protected abstract Object invokeInternal(Object request) throws Exception; 

} 


----------- AddNumberEndpoint類 ----- -------

package com.mt.endpoint; 

import com.mt.calculator.schema.AddNumberRequest; 

public class AddNumberEndpoint extends AbstractCalculatorEndpoint { 
    @Override 
    protected Object invokeInternal(Object request) throws Exception { 
     AddNumberRequest addNumberRequest = (AddNumberRequest) request; 
     if(calculatorService==null) 
      System.out.println("------------------- I AM NULL ------- :( "); 
     return calculatorService.addTwoNumber(addNumberRequest.getFirstNumber(), 
       addNumberRequest.getSecondNumber()); 
    } 
} 



我的servlet配置

<?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:oxm="http://www.springframework.org/schema/oxm" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
     http://www.springframework.org/schema/oxm 
    http://www.springframework.org/schema/oxm/spring-oxm-1.5.xsd"> 

    <bean id="calculatorService" class="com.mt.service.CalculatorServiceImpl" 
     init-method="initialize" /> 

    <bean id="Calculator" 
     class="org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition"> 
     <property name="schema" ref="schema" /> 
     <property name="portTypeName" value="Calculator" /> 
     <property name="locationUri" value="/services" /> 
     <property name="targetNamespace" value="http://www.mt.com/calculator/schema" /> 
    </bean> 

    <bean id="schema" class="org.springframework.xml.xsd.SimpleXsdSchema"> 
     <property name="xsd" value="/WEB-INF/calculator.xsd" /> 
    </bean> 

    <bean id="validatingInterceptor" 
     class="org.springframework.ws.soap.server.endpoint.interceptor.PayloadValidatingInterceptor"> 
     <property name="xsdSchema" ref="schema" /> 
     <property name="validateRequest" value="true" /> 
     <property name="validateResponse" value="true" /> 
    </bean> 

    <bean id="loggingInterceptor" 
     class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor" /> 

    <oxm:jaxb2-marshaller id="marshaller" 
     contextPath="com.mt.calculator.schema" /> 
    <oxm:jaxb2-marshaller id="unmarshaller" 
     contextPath="com.mt.calculator.schema" /> 

    <bean id="addNumberEndpoint" class=" com.mt.endpoint.AddNumberEndpoint" 
     autowire="byName" /> 


    <bean name="endpointMapping" 
     class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping"> 
     <property name="interceptors"> 
      <list> 
       <ref local="loggingInterceptor" /> 
       <ref local="validatingInterceptor" /> 
      </list> 
     </property> 
     <property name="mappings"> 
      <props> 
       <prop key="{http://www.mt.com/calculator/schema}AddNumberRequest"> 
        addNumberEndpoint</prop> 
      </props> 
     </property> 
    </bean> 

    <bean id="exceptionResolver" 
     class="org.springframework.ws.soap.server.endpoint.SoapFaultMappingExceptionResolver"> 
     <property name="defaultFault" value="SERVER" /> 
     <property name="exceptionMappings"> 
      <props> 
       <prop key="org.springframework.oxm.ValidationFailureException">CLIENT,Invalid request</prop> 
       <prop key="com.mt.service.CalculatorException">SERVER</prop> 
      </props> 
     </property> 
    </bean> 
</beans> 


普萊舍讓我知道如果你需要任何其他信息


非常感謝
非常感謝
前一個異常不見了現在我越來越
--------

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode>SOAP-ENV:Server</faultcode> 
     <faultstring xml:lang="en">JAXB marshalling exception; nested exception is javax.xml.bind.MarshalException 
- with linked exception: 
[com.sun.istack.SAXException2: unable to marshal type "java.lang.Integer" as an element because it is missing an @XmlRootElement annotation]</faultstring> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 
+0

你還沒有問了一個問題。你期望的行爲是什麼,以及發生了什麼? –

回答

1

你的名字自動裝配addNumberEndpoint所以Spring將尋找calcService綁定到它(因爲設置者名稱),但CalculatorService的ID是calculatorService

變化setCalcService(...)setCalculatorService(...)AbstractCalculatorEndpoint

+0

謝謝很多我得到解決方案...第二次在改變我的服務實現的返回類型爲** AddNumberResponse **而不是Int – Arvind

+0

嗨我有這個解決方法,但我想知道深入請給我提供的鏈接,我應該參考**謝謝** – Arvind