Axis2通过JSON交互,默认情况下,数据的交互是通过XML完成的,一方面,XML体积相对JSON大,同时,在javascript端使用XML没有JSON方便。所以这里我们要使用JSON进行数据交互。
版本信息:
JDK 1.6
Axis2 1.2 (为什么不用最新版本,因为公司产品线是这个版本)
Tomcat6.0.20
此项目基于项目:http://jerval.iteye.com/blog/2227561 , 所以请先了解此文章并把相应的环境构建好。
1,下载wso2dynamic-response-1.5.mar,主要是为项目提供DynamicResponseHandler。下载地址:http://dist.wso2.org/maven2/org/wso2/dynamicresponse/wso2dynamic-response/1.5/wso2dynamic-response-1.5.mar 。
2,下载wso2dynamic-response-1.5.mar完成后,将其放入此web项目WEB-INF\modules里。
3,下载jettison-1.2.jar和jettison-1.2-patched.jar。
jettison-1.2.jar:http://www.java2s.com/Code/JarDownload/jettison/jettison-1.2.jar.zip
jettison-1.2-patched.jar:http://www.marcusschiesser.de/wp-content/uploads/2009/01/jettison-1.2-patch.zip.zip
4,将下载后jettison-1.2.jar和jettison-1.2-patched.jar包放入{TOMCAT_HOME}/lib下。如果存在jettison-1.0-RC1.jar,则一定要将其删除,否则会出现问题。
5,添加
axis2.xml到web项目WEB-INF/conf中
<!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ --> <axisconfig name="AxisJava2.0"> <!-- ================================================= --> <!-- Parameters --> <!-- ================================================= --> <parameter name="hotdeployment">true</parameter> <parameter name="hotupdate">false</parameter> <parameter name="enableMTOM">false</parameter> <parameter name="enableSwA">false</parameter> <!--Uncomment if you want to enable file caching for attachments --> <!--parameter name="cacheAttachments">true</parameter> <parameter name="attachmentDIR"></parameter> <parameter name="sizeThreshold">4000</parameter--> <!--This will give out the timout of the configuration contexts, in milliseconds--> <parameter name="ConfigContextTimeoutInterval">30000</parameter> <!--During a fault, stack trace can be sent with the fault message. The following flag will control --> <!--that behavior.--> <parameter name="sendStacktraceDetailsWithFaults">false</parameter> <!--If there aren't any information available to find out the fault reason, we set the message of the exception--> <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be --> <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag--> <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.--> <parameter name="DrillDownToRootCauseForFaultReason">false</parameter> <parameter name="userName">admin</parameter> <parameter name="password">axis2</parameter> <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.--> <!--<parameter name="ServicesDirectory">service</parameter>--> <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path--> <!--<parameter name="ModulesDirectory">modules</parameter>--> <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context--> <!--root which can configured using the following contextRoot parameter--> <!--<parameter name="contextRoot">axis2</parameter>--> <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints--> <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this --> <!--context path to proper Axis2 servlets--> <!--<parameter name="servicePath">services</parameter>--> <!--<parameter name="restPath">rest</parameter>--> <!--==============================================================--> <!-- Custom Deplyers --> <!--==============================================================--> <!--To have POJO (Service as only one class file , class can be annotated one or not) support uncomment the following XML tag--> <!--<deployer class="org.apache.axis2.deployment.POJODeployer" extension=".class" directory="pojo"/>--> <!--To have POJO (Service as more than one class , so a jar file) support uncomment the following XML tag--> <!--<deployer class="org.apache.axis2.deployment.POJODeployer" extension=".jar" directory="pojo"/>--> <!-- Following parameter will completely disable REST handling in Axis2--> <parameter name="disableREST" locked="true">false</parameter> <!-- If you have a front end host which exposes this webservice using a different public URL --> <!-- use this parameter to override autodetected url --> <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>--> <!-- The way of adding listener to the system--> <!-- <listener class="org.apache.axis2.ObserverIMPL">--> <!-- <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>--> <!-- </listener>--> <!-- ================================================= --> <!-- Message Receivers --> <!-- ================================================= --> <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for --> <!--all the other MEP implement it and add the correct entry to here , so that you can refer from--> <!--any operation --> <!--Note : You can ovrride this for a particular service by adding the same element with your requirement--> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only" class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> </messageReceivers> <!-- ================================================= --> <!-- Message Formatter --> <!-- ================================================= --> <!--Following content type to message formatter mapping can be used to implement support for different message --> <!--format serialization in Axis2. These message formats are expected to be resolved based on the content type. --> <messageFormatters> <messageFormatter contentType="application/x-www-form-urlencoded" class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/> <messageFormatter contentType="multipart/form-data" class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/> <messageFormatter contentType="application/xml" class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/> </messageFormatters> <!-- ================================================= --> <!-- Message Builders --> <!-- ================================================= --> <!--Following content type to builder mapping can be used to implement support for different message --> <!--formats in Axis2. These message formats are expected to be resolved based on the content type. --> <messageBuilders> <messageBuilder contentType="application/xml" class="org.apache.axis2.builder.ApplicationXMLBuilder"/> <messageBuilder contentType="application/x-www-form-urlencoded" class="org.apache.axis2.builder.XFormURLEncodedBuilder"/> <messageBuilder contentType="multipart/form-data" class="org.apache.axis2.builder.MultipartFormDataBuilder"/> </messageBuilders> <!-- ================================================= --> <!-- Transport Ins --> <!-- ================================================= --> <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer"> <parameter name="port">8080</parameter> <!-- Here is the complete list of supported parameters (see example settings further below): port: the port to listen on (default 6060) hostname: if non-null, url prefix used in reply-to endpoint references (default null) originServer: value of http Server header in outgoing messages (default "Simple-Server/1.1") requestTimeout: value in millis of time that requests can wait for data (default 20000) requestTcpNoDelay: true to maximize performance and minimize latency (default true) false to minimize bandwidth consumption by combining segments requestCoreThreadPoolSize: number of threads available for request processing (unless queue fills up) (default 25) requestMaxThreadPoolSize: number of threads available for request processing if queue fills up (default 150) note that default queue never fills up: see HttpFactory threadKeepAliveTime: time to keep threads in excess of core size alive while inactive (default 180) note that no such threads can exist with default unbounded request queue threadKeepAliveTimeUnit: TimeUnit of value in threadKeepAliveTime (default SECONDS) (default SECONDS) --> <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> --> <!-- <parameter name="originServer">My-Server/1.1</parameter> --> <!-- <parameter name="requestTimeout">10000</parameter> --> <!-- <parameter name="requestTcpNoDelay">false</parameter> --> <!-- <parameter name="requestCoreThreadPoolSize">50</parameter> --> <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter> --> <!-- <parameter name="threadKeepAliveTime">240000</parameter> --> <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter> --> </transportReceiver> <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ) <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <parameter name="myTopicConnectionFactory"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter> </parameter> <parameter name="myQueueConnectionFactory"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> </parameter> <parameter name="default"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> </parameter> </transportReceiver>--> <!-- ================================================= --> <!-- Mail Transport Listener --> <!-- This is a sample configuration. It assumes a mail server running in localhost. Listener pops messages that comes to the email address red@localhost. Users password is red. Listener connect to the server every 3000 milliseconds. Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html --> <!-- ================================================= --> <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener"> <parameter name="mail.pop3.host">localhost</parameter> <parameter name="mail.pop3.user">red</parameter> <parameter name="mail.store.protocol">pop3</parameter> <parameter name="transport.mail.pop3.password">red</parameter> <parameter name="transport.mail.replyToAddress">red@localhost</parameter> <parameter name="transport.listener.interval">3000</parameter> </transportReceiver>--> <!--Uncomment if you want to have TCP transport support--> <!--transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPServer"> <parameter name="port">6060</parameter-->> <!--If you want to give your own host address for EPR generation--> <!--uncomment the following paramter , and set it as you required.--> <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>--> <!-- /transportReceiver --> <!-- ================================================= --> <!-- Transport Outs --> <!-- ================================================= --> <transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/> <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/> <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> <parameter name="PROTOCOL">HTTP/1.1</parameter> <parameter name="Transfer-Encoding">chunked</parameter> <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages --> <!-- <parameter name="OmitSOAP12Action">true</parameter> --> </transportSender> <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> <parameter name="PROTOCOL">HTTP/1.1</parameter> <parameter name="Transfer-Encoding">chunked</parameter> </transportSender> <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender"/> <!-- ================================================= --> <!-- Mail Transport Sender --> <!--Only need to uncomment the sender. Configuration is achieved with every client. At any instant mail host should be given. Sample configuration has been given. http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html --> <!-- ================================================= --> <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender"> <parameter name="mail.smtp.host">localhost</parameter> </transportSender>--> <!-- ================================================= --> <!-- Global Modules --> <!-- ================================================= --> <!-- Comment this to disable Addressing --> <module ref="addressing"/> <!--Configuring module , providing parameters for modules whether they refer or not--> <!--<moduleConfig name="addressing">--> <!--<parameter name="addressingPara">N/A</parameter>--> <!--</moduleConfig>--> <!-- ================================================= --> <!-- Clustering --> <!-- ================================================= --> <!-- Configure and uncomment following for preparing Axis2 to a clustered environment --> <!-- <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager"> <parameter name="param1">value1</parameter> <configurationManager class="org.apache.axis2.cluster.tribes.configuration.TribesConfigurationManager"> <listeners> </listeners> </configurationManager> <contextManager class="org.apache.axis2.cluster.tribes.context.TribesContextManager"> <listeners> </listeners> </contextManager> </cluster> --> <!-- ================================================= --> <!-- Phases --> <!-- ================================================= --> <phaseOrder type="InFlow"> <!-- System predefined phases --> <phase name="Transport"> <handler name="RequestURIBasedDispatcher" class="org.apache.axis2.engine.RequestURIBasedDispatcher"> <order phase="Transport"/> </handler> <handler name="SOAPActionBasedDispatcher" class="org.apache.axis2.engine.SOAPActionBasedDispatcher"> <order phase="Transport"/> </handler> </phase> <phase name="Security"/> <phase name="PreDispatch"/> <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> <handler name="AddressingBasedDispatcher" class="org.apache.axis2.engine.AddressingBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="RequestURIOperationDispatcher" class="org.apache.axis2.engine.RequestURIOperationDispatcher"> <order phase="Dispatch"/> </handler> <handler name="SOAPMessageBodyBasedDispatcher" class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="HTTPLocationBasedDispatcher" class="org.apache.axis2.engine.HTTPLocationBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="InstanceDispatcher" class="org.apache.axis2.engine.InstanceDispatcher"> <order phase="Dispatch"/> </handler> </phase> <!-- System predefined phases --> <!-- After Postdispatch phase module author or service author can add any phase he want --> <phase name="OperationInPhase"/> <phase name="soapmonitorPhase"/> </phaseOrder> <phaseOrder type="OutFlow"> <!-- user can add his own phases to this area --> <phase name="soapmonitorPhase"/> <phase name="OperationOutPhase"/> <!--system predefined phase--> <!--these phase will run irrespective of the service--> <phase name="PolicyDetermination"/> <phase name="MessageOut"/> <phase name="Security"/> </phaseOrder> <phaseOrder type="InFaultFlow"> <phase name="PreDispatch"/> <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> <handler name="RequestURIBasedDispatcher" class="org.apache.axis2.engine.RequestURIBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="SOAPActionBasedDispatcher" class="org.apache.axis2.engine.SOAPActionBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="AddressingBasedDispatcher" class="org.apache.axis2.engine.AddressingBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="RequestURIOperationDispatcher" class="org.apache.axis2.engine.RequestURIOperationDispatcher"> <order phase="Dispatch"/> </handler> <handler name="SOAPMessageBodyBasedDispatcher" class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="HTTPLocationBasedDispatcher" class="org.apache.axis2.engine.HTTPLocationBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="InstanceDispatcher" class="org.apache.axis2.engine.InstanceDispatcher"> <order phase="PostDispatch"/> </handler> </phase> <!-- user can add his own phases to this area --> <phase name="OperationInFaultPhase"/> <phase name="soapmonitorPhase"/> </phaseOrder> <phaseOrder type="OutFaultFlow"> <!-- user can add his own phases to this area --> <phase name="soapmonitorPhase"/> <phase name="OperationOutFaultPhase"/> <phase name="PolicyDetermination"/> <phase name="MessageOut"/> </phaseOrder> </axisconfig>
6,在axis2.xml中添加<module ref="wso2dynamic-response"/>,也可以写成<module ref="wso2dynamic-response-1.5"/>,这里的名字是wso2dynamic-response-1.5.mar的文件名或者文件名去掉版本后缀'-1.5'。添加后的代码:
<!-- ================================================= --> <!-- Global Modules --> <!-- ================================================= --> <!-- Comment this to disable Addressing --> <module ref="wso2dynamic-response"/> <!--Configuring module , providing parameters for modules whether they refer or not--> <!--<moduleConfig name="addressing">--> <!--<parameter name="addressingPara">N/A</parameter>--> <!--</moduleConfig>-->
7,添加messageFormatter:
<messageFormatter contentType="application/json" class="org.apache.axis2.json.JSONMessageFormatter"/> <messageFormatter contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/>
添加后的代码:
<!-- ================================================= --> <!-- Message Formatter --> <!-- ================================================= --> <!--Following content type to message formatter mapping can be used to implement support for different message --> <!--format serialization in Axis2. These message formats are expected to be resolved based on the content type. --> <messageFormatters> <messageFormatter contentType="application/x-www-form-urlencoded" class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/> <messageFormatter contentType="multipart/form-data" class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/> <messageFormatter contentType="application/xml" class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/> <messageFormatter contentType="application/json" class="org.apache.axis2.json.JSONMessageFormatter"/> <messageFormatter contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/> </messageFormatters>
8,添加messageBuilder
<messageBuilder contentType="application/json" class="org.apache.axis2.json.JSONOMBuilder"/> <messageBuilder contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/>
添加后的代码:
<!-- ================================================= --> <!-- Message Builders --> <!-- ================================================= --> <!--Following content type to builder mapping can be used to implement support for different message --> <!--formats in Axis2. These message formats are expected to be resolved based on the content type. --> <messageBuilders> <messageBuilder contentType="application/xml" class="org.apache.axis2.builder.ApplicationXMLBuilder"/> <messageBuilder contentType="application/x-www-form-urlencoded" class="org.apache.axis2.builder.XFormURLEncodedBuilder"/> <messageBuilder contentType="multipart/form-data" class="org.apache.axis2.builder.MultipartFormDataBuilder"/> <messageBuilder contentType="application/json" class="org.apache.axis2.json.JSONOMBuilder"/> <messageBuilder contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/> </messageBuilders>
8,添加完成后的整个axis2.xml:
<!-- /* * Copyright 2001-2004 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ --> <axisconfig name="AxisJava2.0"> <!-- ================================================= --> <!-- Parameters --> <!-- ================================================= --> <parameter name="hotdeployment">true</parameter> <parameter name="hotupdate">false</parameter> <parameter name="enableMTOM">false</parameter> <parameter name="enableSwA">false</parameter> <!--Uncomment if you want to enable file caching for attachments --> <!--parameter name="cacheAttachments">true</parameter> <parameter name="attachmentDIR"></parameter> <parameter name="sizeThreshold">4000</parameter--> <!--This will give out the timout of the configuration contexts, in milliseconds--> <parameter name="ConfigContextTimeoutInterval">30000</parameter> <!--During a fault, stack trace can be sent with the fault message. The following flag will control --> <!--that behavior.--> <parameter name="sendStacktraceDetailsWithFaults">false</parameter> <!--If there aren't any information available to find out the fault reason, we set the message of the exception--> <!--as the faultreason/Reason. But when a fault is thrown from a service or some where, it will be --> <!--wrapped by different levels. Due to this the initial exception message can be lost. If this flag--> <!--is set, then Axis2 tries to get the first exception and set its message as the faultreason/Reason.--> <parameter name="DrillDownToRootCauseForFaultReason">false</parameter> <parameter name="userName">admin</parameter> <parameter name="password">axis2</parameter> <!--To override repository/services you need to uncomment following parameter and value SHOULD be absolute file path.--> <!--<parameter name="ServicesDirectory">service</parameter>--> <!--To override repository/modules you need to uncomment following parameter and value SHOULD be absolute file path--> <!--<parameter name="ModulesDirectory">modules</parameter>--> <!--Following params will set the proper context paths for invocations. All the endpoints will have a commons context--> <!--root which can configured using the following contextRoot parameter--> <!--<parameter name="contextRoot">axis2</parameter>--> <!--Our HTTP endpoints can handle both REST and SOAP. Following parameters can be used to distinguiush those endpoints--> <!--In case of a servlet, if you change this you have to manually change the settings of your servlet container to map this --> <!--context path to proper Axis2 servlets--> <!--<parameter name="servicePath">services</parameter>--> <!--<parameter name="restPath">rest</parameter>--> <!--==============================================================--> <!-- Custom Deplyers --> <!--==============================================================--> <!--To have POJO (Service as only one class file , class can be annotated one or not) support uncomment the following XML tag--> <!--<deployer class="org.apache.axis2.deployment.POJODeployer" extension=".class" directory="pojo"/>--> <!--To have POJO (Service as more than one class , so a jar file) support uncomment the following XML tag--> <!--<deployer class="org.apache.axis2.deployment.POJODeployer" extension=".jar" directory="pojo"/>--> <!-- Following parameter will completely disable REST handling in Axis2--> <parameter name="disableREST" locked="true">false</parameter> <!-- If you have a front end host which exposes this webservice using a different public URL --> <!-- use this parameter to override autodetected url --> <!--<parameter name="httpFrontendHostUrl">https://someotherhost/context</parameter>--> <!-- The way of adding listener to the system--> <!-- <listener class="org.apache.axis2.ObserverIMPL">--> <!-- <parameter name="RSS_URL">http://127.0.0.1/rss</parameter>--> <!-- </listener>--> <!-- ================================================= --> <!-- Message Receivers --> <!-- ================================================= --> <!--This is the deafult MessageReceiver for the system , if you want to have MessageReceivers for --> <!--all the other MEP implement it and add the correct entry to here , so that you can refer from--> <!--any operation --> <!--Note : You can ovrride this for a particular service by adding the same element with your requirement--> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only" class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out" class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> </messageReceivers> <!-- ================================================= --> <!-- Message Formatter --> <!-- ================================================= --> <!--Following content type to message formatter mapping can be used to implement support for different message --> <!--format serialization in Axis2. These message formats are expected to be resolved based on the content type. --> <messageFormatters> <messageFormatter contentType="application/x-www-form-urlencoded" class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/> <messageFormatter contentType="multipart/form-data" class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/> <messageFormatter contentType="application/xml" class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/> <messageFormatter contentType="application/json" class="org.apache.axis2.json.JSONMessageFormatter"/> <messageFormatter contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishMessageFormatter"/> </messageFormatters> <!-- ================================================= --> <!-- Message Builders --> <!-- ================================================= --> <!--Following content type to builder mapping can be used to implement support for different message --> <!--formats in Axis2. These message formats are expected to be resolved based on the content type. --> <messageBuilders> <messageBuilder contentType="application/xml" class="org.apache.axis2.builder.ApplicationXMLBuilder"/> <messageBuilder contentType="application/x-www-form-urlencoded" class="org.apache.axis2.builder.XFormURLEncodedBuilder"/> <messageBuilder contentType="multipart/form-data" class="org.apache.axis2.builder.MultipartFormDataBuilder"/> <messageBuilder contentType="application/json" class="org.apache.axis2.json.JSONOMBuilder"/> <messageBuilder contentType="application/json/badgerfish" class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/> </messageBuilders> <!-- ================================================= --> <!-- Transport Ins --> <!-- ================================================= --> <transportReceiver name="http" class="org.apache.axis2.transport.http.SimpleHTTPServer"> <parameter name="port">8080</parameter> <!-- Here is the complete list of supported parameters (see example settings further below): port: the port to listen on (default 6060) hostname: if non-null, url prefix used in reply-to endpoint references (default null) originServer: value of http Server header in outgoing messages (default "Simple-Server/1.1") requestTimeout: value in millis of time that requests can wait for data (default 20000) requestTcpNoDelay: true to maximize performance and minimize latency (default true) false to minimize bandwidth consumption by combining segments requestCoreThreadPoolSize: number of threads available for request processing (unless queue fills up) (default 25) requestMaxThreadPoolSize: number of threads available for request processing if queue fills up (default 150) note that default queue never fills up: see HttpFactory threadKeepAliveTime: time to keep threads in excess of core size alive while inactive (default 180) note that no such threads can exist with default unbounded request queue threadKeepAliveTimeUnit: TimeUnit of value in threadKeepAliveTime (default SECONDS) (default SECONDS) --> <!-- <parameter name="hostname">http://www.myApp.com/ws</parameter> --> <!-- <parameter name="originServer">My-Server/1.1</parameter> --> <!-- <parameter name="requestTimeout">10000</parameter> --> <!-- <parameter name="requestTcpNoDelay">false</parameter> --> <!-- <parameter name="requestCoreThreadPoolSize">50</parameter> --> <!-- <parameter name="RequestMaxThreadPoolSize">100</parameter> --> <!-- <parameter name="threadKeepAliveTime">240000</parameter> --> <!-- <parameter name="threadKeepAliveTimeUnit">MILLISECONDS</parameter> --> </transportReceiver> <!--Uncomment this and configure as appropriate for JMS transport support, after setting up your JMS environment (e.g. ActiveMQ) <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener"> <parameter name="myTopicConnectionFactory"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">TopicConnectionFactory</parameter> </parameter> <parameter name="myQueueConnectionFactory"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> </parameter> <parameter name="default"> <parameter name="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter> <parameter name="java.naming.provider.url">tcp://localhost:61616</parameter> <parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter> </parameter> </transportReceiver>--> <!-- ================================================= --> <!-- Mail Transport Listener --> <!-- This is a sample configuration. It assumes a mail server running in localhost. Listener pops messages that comes to the email address red@localhost. Users password is red. Listener connect to the server every 3000 milliseconds. Parameters with "transport." prefix is Axis2 specific. Others are all from Java Mail API. http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html --> <!-- ================================================= --> <!--<transportReceiver name="mailto" class="org.apache.axis2.transport.mail.SimpleMailListener"> <parameter name="mail.pop3.host">localhost</parameter> <parameter name="mail.pop3.user">red</parameter> <parameter name="mail.store.protocol">pop3</parameter> <parameter name="transport.mail.pop3.password">red</parameter> <parameter name="transport.mail.replyToAddress">red@localhost</parameter> <parameter name="transport.listener.interval">3000</parameter> </transportReceiver>--> <!--Uncomment if you want to have TCP transport support--> <!--transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPServer"> <parameter name="port">6060</parameter-->> <!--If you want to give your own host address for EPR generation--> <!--uncomment the following paramter , and set it as you required.--> <!--<parameter name="hostname">tcp://myApp.com/ws</parameter>--> <!-- /transportReceiver --> <!-- ================================================= --> <!-- Transport Outs --> <!-- ================================================= --> <transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/> <transportSender name="local" class="org.apache.axis2.transport.local.LocalTransportSender"/> <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> <parameter name="PROTOCOL">HTTP/1.1</parameter> <parameter name="Transfer-Encoding">chunked</parameter> <!-- If following is set to 'true', optional action part of the Content-Type will not be added to the SOAP 1.2 messages --> <!-- <parameter name="OmitSOAP12Action">true</parameter> --> </transportSender> <transportSender name="https" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> <parameter name="PROTOCOL">HTTP/1.1</parameter> <parameter name="Transfer-Encoding">chunked</parameter> </transportSender> <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender"/> <!-- ================================================= --> <!-- Mail Transport Sender --> <!--Only need to uncomment the sender. Configuration is achieved with every client. At any instant mail host should be given. Sample configuration has been given. http://people.apache.org/~pzf/SMTPBase64Binding-0.2.html --> <!-- ================================================= --> <!--<transportSender name="mailto" class="org.apache.axis2.transport.mail.MailTransportSender"> <parameter name="mail.smtp.host">localhost</parameter> </transportSender>--> <!-- ================================================= --> <!-- Global Modules --> <!-- ================================================= --> <!-- Comment this to disable Addressing --> <module ref="wso2dynamic-response"/> <!--Configuring module , providing parameters for modules whether they refer or not--> <!--<moduleConfig name="addressing">--> <!--<parameter name="addressingPara">N/A</parameter>--> <!--</moduleConfig>--> <!-- ================================================= --> <!-- Clustering --> <!-- ================================================= --> <!-- Configure and uncomment following for preparing Axis2 to a clustered environment --> <!-- <cluster class="org.apache.axis2.cluster.tribes.TribesClusterManager"> <parameter name="param1">value1</parameter> <configurationManager class="org.apache.axis2.cluster.tribes.configuration.TribesConfigurationManager"> <listeners> </listeners> </configurationManager> <contextManager class="org.apache.axis2.cluster.tribes.context.TribesContextManager"> <listeners> </listeners> </contextManager> </cluster> --> <!-- ================================================= --> <!-- Phases --> <!-- ================================================= --> <phaseOrder type="InFlow"> <!-- System predefined phases --> <phase name="Transport"> <handler name="RequestURIBasedDispatcher" class="org.apache.axis2.engine.RequestURIBasedDispatcher"> <order phase="Transport"/> </handler> <handler name="SOAPActionBasedDispatcher" class="org.apache.axis2.engine.SOAPActionBasedDispatcher"> <order phase="Transport"/> </handler> </phase> <phase name="Security"/> <phase name="PreDispatch"/> <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> <handler name="AddressingBasedDispatcher" class="org.apache.axis2.engine.AddressingBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="RequestURIOperationDispatcher" class="org.apache.axis2.engine.RequestURIOperationDispatcher"> <order phase="Dispatch"/> </handler> <handler name="SOAPMessageBodyBasedDispatcher" class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="HTTPLocationBasedDispatcher" class="org.apache.axis2.engine.HTTPLocationBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="InstanceDispatcher" class="org.apache.axis2.engine.InstanceDispatcher"> <order phase="Dispatch"/> </handler> </phase> <!-- System predefined phases --> <!-- After Postdispatch phase module author or service author can add any phase he want --> <phase name="OperationInPhase"/> <phase name="soapmonitorPhase"/> </phaseOrder> <phaseOrder type="OutFlow"> <!-- user can add his own phases to this area --> <phase name="soapmonitorPhase"/> <phase name="OperationOutPhase"/> <!--system predefined phase--> <!--these phase will run irrespective of the service--> <phase name="PolicyDetermination"/> <phase name="MessageOut"/> <phase name="Security"/> </phaseOrder> <phaseOrder type="InFaultFlow"> <phase name="PreDispatch"/> <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> <handler name="RequestURIBasedDispatcher" class="org.apache.axis2.engine.RequestURIBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="SOAPActionBasedDispatcher" class="org.apache.axis2.engine.SOAPActionBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="AddressingBasedDispatcher" class="org.apache.axis2.engine.AddressingBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="RequestURIOperationDispatcher" class="org.apache.axis2.engine.RequestURIOperationDispatcher"> <order phase="Dispatch"/> </handler> <handler name="SOAPMessageBodyBasedDispatcher" class="org.apache.axis2.engine.SOAPMessageBodyBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="HTTPLocationBasedDispatcher" class="org.apache.axis2.engine.HTTPLocationBasedDispatcher"> <order phase="Dispatch"/> </handler> <handler name="InstanceDispatcher" class="org.apache.axis2.engine.InstanceDispatcher"> <order phase="PostDispatch"/> </handler> </phase> <!-- user can add his own phases to this area --> <phase name="OperationInFaultPhase"/> <phase name="soapmonitorPhase"/> </phaseOrder> <phaseOrder type="OutFaultFlow"> <!-- user can add his own phases to this area --> <phase name="soapmonitorPhase"/> <phase name="OperationOutFaultPhase"/> <phase name="PolicyDetermination"/> <phase name="MessageOut"/> </phaseOrder> </axisconfig>
9,部署web项目到Tomcat,并启动Tomcat,启动完成后在浏览器中输入:http://localhost:8080/webservice/services/WeatherService/getWeather?response=application/json
如果成功,则会返回如下内容:
{"return":{"@nil":"true"}}
最少lib包:
annogen-0.1.0.jar axiom-api-1.2.4.jar axiom-impl-1.2.4.jar axis2-adb-1.2.jar axis2-java2wsdl-1.2.jar axis2-json-1.2.jar axis2-kernel-1.2.jar backport-util-concurrent.jar commons-codec-1.3.jar commons-fileupload-1.1.1.jar commons-httpclient-3.0.1.jar commons-logging.jar jettison-1.2.jar jettison-1.2-patched.jar neethi-2.0.1.jar wsdl4j-1.5.1.jar XmlSchema-1.3.1.jar