您好,欢迎来到花图问答。
搜索
您的当前位置:首页Webservice之AXIS版本

Webservice之AXIS版本

来源:花图问答

前几日看到旧项目中,有用Apache的axis来构建webservice。实验一次。
新建一web项目,作为服务器端,用到的jar包。
wsdl4j-1.6.2.jar
webservices-extra-api.jar
commons-discovery-0.2.jar
axis.jar
activemq-all-5.4.2.jar
第一步:web.xml。

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" 

<web-app>
    <display-name>Apache-Axis</display-name>
    <listener>
        <listener-class>
            org.apache.axis.transport.http.AxisHTTPSessionListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>AxisServlet</servlet-name>
        <display-name>Apache-Axis Servlet</display-name>
        <servlet-class>
            org.apache.axis.transport.http.AxisServlet
        </servlet-class>
    </servlet>
    <servlet>
        <servlet-name>AdminServlet</servlet-name>
        <display-name>Axis Admin Servlet</display-name>
        <servlet-class>
            org.apache.axis.transport.http.AdminServlet
        </servlet-class>
        <load-on-startup>100</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>SOAPMonitorService</servlet-name>
        <display-name>SOAPMonitorService</display-name>
        <servlet-class>
            org.apache.axis.monitor.SOAPMonitorService
        </servlet-class>
        <init-param>
            <param-name>SOAPMonitorPort</param-name>
            <param-value>5001</param-value>
        </init-param>
        <load-on-startup>100</load-on-startup>
    </servlet>

<!-- AXIS -->
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>
<!-- 此处不允许变动,为axis规定-->
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>SOAPMonitorService</servlet-name>
        <url-pattern>/SOAPMonitor</url-pattern>
    </servlet-mapping>

<!--    <servlet-mapping>-->
<!--        <servlet-name>mqpoolinitservlet</servlet-name>-->
<!--        <url-pattern>/mqpoolinitservlet</url-pattern>-->
<!--    </servlet-mapping>-->

    <!-- uncomment this if you want the admin servlet -->
    <!--
        <servlet-mapping>
        <servlet-name>AdminServlet</servlet-name>
        <url-pattern>/servlet/AdminServlet</url-pattern>
        </servlet-mapping>
    -->

    <session-config>
        <!-- Default to 5 minute session timeouts -->
        <session-timeout>5</session-timeout>
    </session-config>

    <!-- currently the W3C havent settled on a media type for WSDL;
        
        for now we go with the basic 'it's XML' response -->
    <mime-mapping>
        <extension>wsdl</extension>
        <mime-type>text/xml</mime-type>
    </mime-mapping>

    <mime-mapping>
        <extension>xsd</extension>
        <mime-type>text/xml</mime-type>
    </mime-mapping>

    <welcome-file-list id="WelcomeFileList">
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jws</welcome-file>
    </welcome-file-list>
</web-app>

服务器端JAVA:

package test;

public class TTTInterface {
    public String getMyName(String name){
        return "hello!I am "+name;
    }
}

在WEB_INF下新建一文件,名字必须为service-config.wsdd

<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <globalConfiguration>
        <parameter name="sendMultiRefs" value="true" />
        <parameter name="disablePrettyXML" value="true" />
        <parameter name="adminPassword" value="admin" />
        <!--
            <parameter name="attachments.Directory"
            value="E:\bea\user_projects\domains\credituniondomain\applications\pwebs\WEB-INF\attachments"/>
        -->
        <parameter name="dotNetSoapEncFix" value="true" />
        <parameter name="enableNamespacePrefixOptimization" value="false" />
        <parameter name="sendXMLDeclaration" value="true" />
        <parameter name="sendXsiTypes" value="true" />
        <parameter name="attachments.implementation"
            value="org.apache.axis.attachments.AttachmentsImpl" />
        <requestFlow>
            <handler type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="session" />
            </handler>
            <handler type="java:org.apache.axis.handlers.JWSHandler">
                <parameter name="scope" value="request" />
                <parameter name="extension" value=".jwr" />
            </handler>
        </requestFlow>
    </globalConfiguration>

    <handler name="LocalResponder"
        type="java:org.apache.axis.transport.local.LocalResponder" />
    <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
    <handler name="Authenticate"
        type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />

    <service name="AdminService" provider="java:MSG">
        <parameter name="allowedMethods" value="AdminService" />
        <parameter name="enableRemoteAdmin" value="false" />
        <parameter name="className" value="org.apache.axis.utils.Admin" />
        <namespace>http://xml.apache.org/axis/wsdd/</namespace>
    </service>

<!-- 此处为自己写的服务器端JAVA代码接口定义 -->
    <service name="Ting" provider="java:RPC">
        <parameter name="allowedMethods" value="*" />
        <parameter name="className" value="test.TTTInterface" />
    </service>
<transport name="http">
        <requestFlow>
            <handler type="URLMapper" />
            <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
        </requestFlow>
        <parameter name="qs:list"
            value="org.apache.axis.transport.http.QSListHandler" />
        <parameter name="qs:wsdl"
            value="org.apache.axis.transport.http.QSWSDLHandler" />
        <parameter name="qs.list"
            value="org.apache.axis.transport.http.QSListHandler" />
        <parameter name="qs.method"
            value="org.apache.axis.transport.http.QSMethodHandler" />
        <parameter name="qs:method"
            value="org.apache.axis.transport.http.QSMethodHandler" />
        <parameter name="qs.wsdl"
            value="org.apache.axis.transport.http.QSWSDLHandler" />
    </transport>
    <transport name="local">
        <responseFlow>
            <handler type="LocalResponder" />
        </responseFlow>
    </transport>
</deployment>

客户端调用JAVA代码:

package server;

import 

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;

public class HelloServer {
    
    public static final String ENDPOINT="http://localhost:8080/WB/services/Ting?wsdl";
    

    public static void main(String[] args) {
        try{
        Service service = new Service();
        Call call = (Call)service.createCall();
        QName qName = new QName("String");
        //注意方法名与传入参数名必须对应
        call.setOperationName(new QName("getMyName"));
        call.setTargetEndpointAddress(new URL(ENDPOINT));
        call.setReturnType(qName, String.class);
        call.addParameter("name", XMLType.XSD_STRING, ParameterMode.IN);
        
        String s=call.invoke(new Object[]{"zs"}).toString();
        System.out.println(s);
        
        }catch(Exception e){
            System.out.println(e.getLocalizedMessage());
        }       
    }
}

Copyright © 2019- huatuowenda.com 版权所有 湘ICP备2023022495号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务