hi,Sagara,
the Axis2+spring is ok now.
I have a method need return objects.
how can i do?
attahch is my main config and source:
1. project folder :
projectName
|----src
| |----com.xxx.ws
| |----|-----DataSetServiceEnquiry.java
| |----com.xxx.ws.pojo
| |----|-----DataSet.java
|
|----WebRoot
| |
| |----WEB-INF
| | |----classes
| | |----conf
| | | |----axis2.xml
| | |----modules
| | | |----addressing-1.4.1.mar
| | | |----axis2-scripting-1.4.1.mar
| | | |----mex-1.4.1.mar
| | | |----modules-1.4.1.mar
| | | |----ping-1.4.1.mar| |
| | | |----soapmonitor-1.4.1.mar
| | |----pojo
| | |----services
| | | |----xxx
| | | | |----META-INF
| | | | | |----services.xml
| | | |----services.list
| | | |----version-1.4.1.aar
| | |----Web.xml
2. web.xml
in this file, i copy all content from axis2.war /WEB-INF/web.xml
3.services.xml
<serviceGroup>
<service name="DataSetServiceEnquiry">
<description>
simple spring example
</description>
<parameter
name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
<parameter name="SpringBeanName">dataSetServiceEnquiry</parameter>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
</service>
</serviceGroup>
3.DataSetServiceEnquiry.java
public class DataSetServiceEnquiry {
....ohter code...
// The web service
public String getUserAccountCount() {
return "(RPCMessageReceiver) Total UserAccount count is
:"+String.valueOf(this.getUserAccountManager().findAllUserAccount().size());
}
public com.eadi.ws.pojo.DataSet[] getDataSetList(){
List list=this.getDataSetManager().findAll();
com.xxx.ws.pojo.DataSet[] ds=new com.xxx.ws.pojo.DataSet[list.size()];
for(int i=0;list!=null & i<list.size();i++){
com.xxx.dao.hibernate.DataSet
tmpds=(com.eadi.dao.hibernate.DataSet)list.get(i);
ds[i].setCreatedDate(tmpds.getCreatedDate());
ds[i].setCreatedUser(tmpds.getCreatedUser());
ds[i].setDataProvider(tmpds.getDataProvider());
ds[i].setDataSetId(tmpds.getDataSetId());
.......other properties........
}
return ds;
}
}
4. deploy to JBOSS 4.2.3.GA
5.client from dotnet c#
a) first method of webservice is ok.
DataSetServiceEnquiry.DataSetServiceEnquiry ws = new
DataSetServiceEnquiry.DataSetServiceEnquiry();
DataSetServiceEnquiry.getUserAccountCountResponse response
= ws.getUserAccountCount();
this.textBox1.Text = [email protected]();
b) the second method of webservice have error on jboss:
1:36:07,187 INFO [STDOUT] 2009-07-31 11:36:07,171 ERROR
[org.apache.axis2.rpc.receivers.RPCMessageReceiver] - Exception
occurred while trying to invoke service method getDataSetList
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:165)
at
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
at
org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xxx.web.bean.SessionFilter.doFilter(SessionFilter.java:98)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.NullPointerException
at
com.xxx.ws.DataSetServiceEnquiry.getDataSetList(DataSetServiceEnquiry.java:73)
... 34 more
11:36:07,187 INFO [STDOUT] 2009-07-31 11:36:07,187 ERROR
[org.apache.axis2.engine.AxisEngine] - Exception occurred while trying
to invoke service method getDataSetList
org.apache.axis2.AxisFault: Exception occurred while trying to invoke
service method getDataSetList
at
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:158)
at
org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40)
at
org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:100)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:176)
at
org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:275)
at
org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:133)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.xxx.web.bean.SessionFilter.doFilter(SessionFilter.java:98)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at
org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
at java.lang.Thread.run(Thread.java:595)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at
org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:165)
at
org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:102)
... 28 more
Caused by: java.lang.NullPointerException
at
com.xxx.ws.DataSetServiceEnquiry.getDataSetList(DataSetServiceEnquiry.java:73)
... 34 more
2009/7/29 Sagara Gunathunga <[email protected]>:
> Hi,
> I have noticed following problems with your approach.
>
> 1.) You have placed service.xml file in a wrong place , it should be
> like this /mysite/META-INF/services/services.xml . ( refer [1] to get
> familiar with correct directory structure )
>
> 2.)As a suggestion in DataSetServiceEnquiry class you can expose your
> web service as a POJO method. Axis2 supports for exposing Spring beans
> (POJO) as web services, here you don't need to deal with OMElement
> unless you really want to do so .
>
> instead of public OMElement getValue(OMElement ignore) method,
> simply you can use following method with RPCMessageReceiver (in
> service.xml).
>
> public String getValue(){
> return this.dataSetEnquiryManager.getValue();
> }
>
>
> 3.) you haven't mention any thing about web.xml file or how you deploy
> your service whether it as a WAR archive or as a AAR archive ?
>
>
>
> [1] - http://www.developer.com/open/article.php/3777111
>
> Thanks ,
>
>
> On Wed, Jul 29, 2009 at 8:44 AM, sam wong<[email protected]> wrote:
>> hi,Sagara
>> first , my web site is working.
>>
>> 1. Spring Bean
>>
>> public interface IDataSetEnquiryManager {
>> public String getValue();
>> }
>> public class DataSetEnquiryManagerImpl implements IDataSetEnquiryManager {
>> public String getValue(){
>> return "TEST";
>> }
>> }
>>
>> applicationContext.xml is:
>>
>> <bean id="DataSetServiceEnquiry"
>> class="com.eadi.ws.DataSetServiceEnquiry">
>> <property name="dataSetEnquiryManager">
>> <ref bean="dataSetEnquiryManager" />
>> </property>
>> </bean>
>> <bean id="dataSetEnquiryManager"
>> class="com.eadi.service.impl.DataSetEnquiryManagerImpl">
>> </bean>
>>
>> 2. web service class,
>>
>> DataSetServiceEnquiry.java :
>>
>> package com.eadi.ws;
>> import org.apache.axiom.om.OMAbstractFactory;
>> import org.apache.axiom.om.OMElement;
>> import org.apache.axiom.om.OMFactory;
>> import org.apache.axiom.om.OMNamespace;
>> import org.apache.axiom.om.OMText;
>>
>> import com.eadi.service.IDataSetEnquiryManager;
>> public class DataSetServiceEnquiry {
>> private IDataSetEnquiryManager dataSetEnquiryManager = null;
>> public IDataSetEnquiryManager getDataSetEnquiryManager() {
>> return dataSetEnquiryManager;
>> }
>> public void setDataSetEnquiryManager(
>> IDataSetEnquiryManager dataSetEnquiryManager) {
>> this.dataSetEnquiryManager = dataSetEnquiryManager;
>> }
>> // The web service
>> public OMElement getValue(OMElement ignore) {
>> OMFactory factory=OMAbstractFactory.getOMFactory();
>> OMNamespace payloadNs=
>> factory.createOMNamespace("http://ws.eadi.com/datasetenquiry",
>> "datasetenquiry");
>> OMElement payload =factory.createOMElement("string", payloadNs);
>> OMText response =
>> factory.createOMText(this.dataSetEnquiryManager.getValue());
>> payload.addChild(response);
>> return payload;
>> }
>> }
>>
>>
>>
>> 3. add services.xml to /mysite/META-INF/services.xml
>>
>> <serviceGroup>
>> <service name="DataSetServiceEnquiry">
>> <description>
>> simple spring example
>> </description>
>> <parameter
>> name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier</parameter>
>> <parameter name="SpringBeanName">dataSetServiceEnquiry</parameter>
>> <operation name="getValue">
>> <messageReceiver
>> class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/>
>> </operation>
>> </service>
>> </serviceGroup>
>>
>>
>>
>> 4. open url in browser :
>> http://localhost:8080/EADIWeb/services/DataSetServiceEnquiry?wsdl
>>
>>
>> and got error result:
>>
>> 11:09:14,877 ERROR [[jsp]] Servlet.service() for servlet jsp threw exception
>> javax.servlet.ServletException: File
>> "/axis2-web/listSingleService.jsp" not found
>> at
>> org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
>> at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
>> at
>> org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
>> at
>> org.apache.axis2.transport.http.AbstractAgent.renderView(AbstractAgent.java:121)
>> at
>> org.apache.axis2.transport.http.ListingAgent.processListService(ListingAgent.java:407)
>> at
>> org.apache.axis2.transport.http.AxisServlet.doGet(AxisServlet.java:242)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> at com.eadi.web.bean.SessionFilter.doFilter(SessionFilter.java:98)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> at
>> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
>> at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
>> at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
>> at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
>> at
>> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
>> at
>> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)
>> at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>> at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
>> at
>> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:157)
>> at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
>> at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:262)
>> at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
>> at
>> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
>> at
>> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:446)
>> at java.lang.Thread.run(Thread.java:595)
>> 11:09:14,877 INFO [STDOUT] 2009-07-29 11:09:14,877 INFO
>> [org.apache.axis2.transport.http.AbstractAgent] - Old Servlet API
>> :javax.servlet.ServletException: File
>> "/axis2-web/listSingleService.jsp" not found
>>
>>
>>
>>
>> 2009/7/29 Sagara Gunathunga <[email protected]>:
>>> AFAIK there is no any restriction with Spring 2.5 or any other version
>>> , i don't think you will encounter any version problem. As i remember
>>> i have used Spring 2.5.6 without any problems, so you better to try
>>> out first and write back to the list if you get any issue.
>>>
>>> Thanks ,
>>>
>>> On Wed, Jul 29, 2009 at 6:57 AM, sam wong<[email protected]> wrote:
>>>> hi,Sagara,
>>>>
>>>> I found this in the sample page :Spring versions 1.2.6, 1.2.8 and 2.0
>>>> have been tested, but probably any version would work as only the core
>>>> functionality is required.
>>>>
>>>> I am using spring 2.5,
>>>> current axis2 version is not support spring 2.5 ?
>>>>
>>>>
>>>>
>>>> Best & Regards,
>>>> Sam Wong
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> 2009/7/29 Sagara Gunathunga <[email protected]>:
>>>>> Hi ,
>>>>> You can write your functions with Spring/Hibernate as usual and then
>>>>> possible to expose your Spring services ( a bean) as a web service
>>>>> using Axis2 -Spring integration.
>>>>>
>>>>> Basically you have to do following two steps.
>>>>>
>>>>> 1.) Like in any other web framework define the Spring
>>>>> ContextLoaderListener in the web.xml file in order to load the Spring
>>>>> ApplicationContext.
>>>>>
>>>>> 2.) Define SpringServletContextObjectSupplier as the
>>>>> ServiceObjectSupplier for your web service , you can define this in
>>>>> the axis2 service.xml file.
>>>>>
>>>>> please refer[1] for details and code samples.
>>>>>
>>>>> [1] - http://ws.apache.org/axis2/1_5/spring.html
>>>>>
>>>>> Thanks ,
>>>>>
>>>>> On Tue, Jul 28, 2009 at 11:16 PM, sam wong<[email protected]> wrote:
>>>>>> hi, everybody,
>>>>>>
>>>>>> I hava a web project writing with Spring2.5+Hibernate
>>>>>> some function need publish as WebService.
>>>>>> I want to use Axis2 to impletment this.
>>>>>>
>>>>>>
>>>>>> anybody can give me some Tutorial about this?
>>>>>>
>>>>>>
>>>>>>
>>>>>> thanks a lot..
>>>>>>
>>>>>>
>>>>>>
>>>>>> Sam Wong.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Sagara Gunathunga
>>>>>
>>>>> Blog - http://ssagara.blogspot.com
>>>>> Web - http://sagaras.awardspace.com/
>>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> Sagara Gunathunga
>>>
>>> Blog - http://ssagara.blogspot.com
>>> Web - http://sagaras.awardspace.com/
>>>
>>
>
>
>
> --
> Sagara Gunathunga
>
> Blog - http://ssagara.blogspot.com
> Web - http://sagaras.awardspace.com/
>