LogHandler
1. LoginImpl.java
package cn.com.mytest.server;
import java.util.List;
import java.util.Arrays;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import cn.com.mytest.dao.hibernate.Tblogin;
import cn.com.mytest.dao.LoginDaoImpl;
public class LoginImpl {
public static void main(String[] args){
LoginImpl impl = new LoginImpl();
Tblogin[] list = impl.list();
System.out.println(list.length);
}
private static final Log log = LogFactory.getLog(LoginImpl.class);
LoginDaoImpl dao = new LoginDaoImpl();
public String[] listCodes(){
List list = dao.list();
if(list!=null){
String[] codes = new String[list.size()];
for(int i=0;i<list.size();i++){
Tblogin login = (Tblogin) list.get(i);
log.info("the login result: number " + i + ", loginname=" + login.getLogincode().trim().toUpperCase());
codes[i] = login.getLogincode().trim().toUpperCase();
}
return codes;
}else{
log.info("there is no rows in the table Tblogin");
return null;
}
}
public Tblogin[] list(){
List list = dao.list();
if(list!=null){
Tblogin[] logins = new Tblogin[list.size()];
for(int i=0;i<list.size();i++){
Tblogin login = (Tblogin) list.get(i);
logins[i] = login;
}
return logins;
}
return null;
}
public Object get(Integer loginid){
if(loginid==null || loginid.intValue()==0) return null;
return dao.get(loginid);
}
public Integer count(){
Integer count = new Integer(0);
List list = dao.list();
if(list!=null) count = new Integer(list.size());
log.info("the count of Tblogin is: " + count.intValue());
return count;
}
}
2. LogHandlerService.java
package cn.com.mytest.server;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Hashtable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.axis.AxisFault;
import org.apache.axis.Handler;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
public class LogHandlerService extends BasicHandler {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
}
private static Log log = LogFactory.getLog(LogHandlerService.class);
public void invoke(MessageContext msgContext) throws AxisFault {
//每当web服务被调用,都记录到log中。
try {
Handler handler = msgContext.getService();
Hashtable hTable = getOptions();
log.info("getOptions() results: " + hTable);
String filename = (String)getOption("filename");
if ((filename == null) || (filename.equals("")))
throw new AxisFault("Server.NoLogFile",
"No log file configured for the LogHandler!",
null, null);
FileOutputStream fos = new FileOutputStream(filename, true);
PrintWriter writer = new PrintWriter(fos);
Integer counter = (Integer)handler.getOption("accesses");
if (counter == null)
counter = new Integer(0);
counter = new Integer(counter.intValue() + 1);
Date date = new Date();
msgContext.getMessage().writeTo(System.out);
String result = "在" + date + ": Web 服务 " +
msgContext.getTargetService() +
" 被调用,现在已经共调用了 " + counter + " 次.";
handler.setOption("accesses", counter);
writer.println(result);
writer.close();
} catch (Exception e) {
throw AxisFault.makeFault(e);
}
}
}
3. deployee.wsdd
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="LoginService" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="cn.com.mytest.server.LoginImpl"/>
<requestFlow>
<handler name="logging" type="java:cn.com.mytest.server.LogHandlerService">
<parameter name="filename" value="MyService.log"/>
</handler>
</requestFlow>
<typeMapping qname="ns:Tblogin" xmlns:ns="urn:LoginImpl"
languageSpecificType="java:cn.com.mytest.dao.hibernate.Tblogin"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<arrayMapping qname="ns:ArrayOfTblogin" xmlns:ns="urn:LoginImpl"
languageSpecificType="java:cn.com.mytest.dao.hibernate.Tblogin[]"
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
innerType="ns:Tblogin" xmlns:ns2="urn:LoginImpl"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</service>
</deployment>
4. TestClient.java
package cn.com.mytest.client;
import java.util.List;
import java.io.File;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import cn.com.mytest.dao.hibernate.Tblogin;
import cn.com.mytest.server.*;
public class TestClient {
public static void main(String [] args)
{
try {
String endpointURL = "http://localhost:8080/axis/services/LoginService";
Service service = new Service();
Call call = (Call) service.createCall();
QName qn1 = new QName("urn:LoginImpl","Tblogin");
QName qn = new QName( "urn:LoginImpl", "ArrayOfTblogin" );
call.registerTypeMapping(Tblogin.class, qn1,
new org.apache.axis.encoding.ser.BeanSerializerFactory(Tblogin.class, qn1),
new org.apache.axis.encoding.ser.BeanDeserializerFactory(Tblogin.class, qn1));
call.registerTypeMapping(Tblogin[].class, qn,
new org.apache.axis.encoding.ser.ArraySerializerFactory(),
new org.apache.axis.encoding.ser.ArrayDeserializerFactory());
call.setTargetEndpointAddress( new java.net.URL(endpointURL) );
call.setOperationName( new QName("http://server.mytest.com.cn", "list") );
call.setReturnType(XMLType.SOAP_ARRAY);
Tblogin[] logins = (Tblogin[]) call.invoke(new Object[]{});
if(logins!=null){
for(int i=0;i<logins.length;i++){
Tblogin login = logins[i];
System.out.println("....... login code........" + login.getLogincode());
}
}
else System.out.println("null");
} catch (Exception e) {
System.err.println(e.toString());
}
}
}