2011-11-21 37 views
1

我正在尝试构建一个简单的Web服务。我遵循this tutorial,它工作得很好。轴故障:“服务类必须公开为访问修饰符”

但是,当我更改为Converter类创建界面,Eclipse的汽车既包括IConverter.classConverter.class但是当我运行测试,它总是返回这个结果:

<soapenv:Reason> 
    <soapenv:Text xml:lang="en-US"> 
     Service class wtp.IConverter must have public as access Modifier 
    </soapenv:Text> 
</soapenv:Reason> 

我在的代码public关键字iConverter及其方法。

这里是我的Java源:

接口:

package wtp; 
public interface IConverter { 
    public float celToF(float cel); 
    public float fToCel(float f); 
} 

实现:

​​

的services.xml:

<service name="IConverter"> 
    <Description> 
     Test ws 
    </Description> 
    <messageReceivers> 
     <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> 
     <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> 
    </messageReceivers> 
    <parameter name="ServiceClass" locked="false">wtp.IConverter 
    </parameter> 
</service> 

的web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>TestWS</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
     <welcome-file>index.htm</welcome-file> 
     <welcome-file>index.jsp</welcome-file> 
     <welcome-file>default.html</welcome-file> 
     <welcome-file>default.htm</welcome-file> 
     <welcome-file>default.jsp</welcome-file> 
     <welcome-file>/axis2-web/index.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
     <display-name>Apache-Axis Servlet</display-name> 
     <servlet-name>AxisServlet</servlet-name> 
     <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>AxisServlet</servlet-name> 
     <url-pattern>/servlet/AxisServlet</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>AxisServlet</servlet-name> 
     <url-pattern>*.jws</url-pattern> 
    </servlet-mapping> 
    <servlet-mapping> 
     <servlet-name>AxisServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
    <servlet> 
     <display-name>Apache-Axis Admin Servlet Web Admin</display-name> 
     <servlet-name>AxisAdminServlet</servlet-name> 
     <servlet-class>org.apache.axis2.transport.http.AxisAdminServlet</servlet-class> 
     <load-on-startup>100</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>AxisAdminServlet</servlet-name> 
     <url-pattern>/axis2-admin/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

我该如何解决这个问题?

+0

是否将您的wtp.iConverter类声明为公共类? – bithead61

+0

包括你的代码。 – jtahlborn

+0

@ bithead61我添加了我的代码,类是我的工具,并且这些xml文件是由eclipse自动生成的 –

回答

1

不要将接口名称作为服务类传递 - 传递实现该接口的类的名称。 Axis2正在尝试使用反射来创建服务类的实例。 services.xml中的参数定义如下:

<parameter name="ServiceClass" locked="false"> wtp.Converter </parameter> 
+0

你是对的,我面临同样的问题,你的文章帮助了我。谢谢。你能找出它创建service.xml文件的原因,它的服务类是一个接口名称,而不是它的Impl类名,这是一个问题。 – Jayesh