xis 1.4 포 함 된 list 를 전달 하 는 복잡 한 대상
14583 단어 apache.xmlwebservicesshSOAP
package com.wensi.service.server;
import java.io.Serializable;
public class LoginResponse implements Serializable{
private boolean flag;// :true false
private OperatorBean operator;// , null
private AuthorityBean[] authorityArray;// , null
private String checkNum;//
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public OperatorBean getOperator() {
return operator;
}
public void setOperator(OperatorBean operator) {
this.operator = operator;
}
public AuthorityBean[] getAuthorityArray() {
return authorityArray;
}
public void setAuthorityArray(AuthorityBean[] authorityArray) {
this.authorityArray = authorityArray;
}
public String getCheckNum() {
return checkNum;
}
public void setCheckNum(String checkNum) {
this.checkNum = checkNum;
}
}
이것 은 복잡 한 사용자 정의 대상 입 니 다. 이 대상 은 기본 형식, 사용자 정의 대상, 사용자 정의 대상 배열 을 포함 하고 있 습 니 다.나머지 대상 은 자세히 말 하지 않 겠 습 니 다. axis 1.4 가 서 비 스 를 발표 하 는 wdd 파일 을 보 겠 습 니 다.
<?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">
<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>
<handler type="java:com.wensi.service.server.BSHeaderHandler" name="BSHeaderHandler"/>
<service name="ZNWService" provider="java:RPC">
<requestFlow>
<handler type="BSHeaderHandler"/>
</requestFlow>
<parameter name="className" value="com.wensi.service.server.ZNWService"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="session"/>
<!-- -->
<operation name="login" returnType="ns:LoginResponse">
<parameter name="userName" type="tns:string"/>
<parameter name="password" type="tns:string"/>
</operation>
<!-- -->
<typeMapping
qname="ns:OperatorBean"
xmlns:ns="ZNWService"
type="java:com.wensi.service.server.OperatorBean"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
/>
<typeMapping
qname="ns:AuthorityBean"
xmlns:ns="ZNWService"
type="java:com.wensi.service.server.AuthorityBean"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
/>
<arrayMapping
qname="ns:ArrayOfAuthorityBean"
xmlns:ns="ZNWService"
type="java:com.wensi.service.server.AuthorityBean[]"
innerType="ns:AuthorityBean"
xmlns:ns2="ZNWService"
deserializer="org.apache.axis.encoding.ser.ArrayDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
serializer="org.apache.axis.encoding.ser.ArraySerializerFactory"
/>
<typeMapping
qname="ns:LoginResponse"
xmlns:ns="ZNWService"
type="java:com.wensi.service.server.LoginResponse"
deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
</requestFlow>
</transport>
</deployment>
메모: < transport name = "http" >
이 설정 이 없 으 면 브 라 우 저 에 wdl 상세 정 보 를 표시 할 수 없습니다.
화해시키다
차단기 에 해당 하 는 기능 을 실현 하 는 것 입 니 다. 클 라 이언 트 는 서버 의 인 터 페 이 스 를 호출 하기 전에 이 방법 으로 처리 해 야 합 니 다.
여기 서 권한 검증 차단 기 를 썼 습 니 다. 코드 는 다음 과 같 습 니 다.
package com.wensi.service.server;
import org.apache.axis.AxisFault;
import org.apache.axis.Message;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPHeader;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.message.SOAPEnvelope;
import org.apache.axis.message.MessageElement;
import com.wensi.common.Util;
import javax.xml.namespace.QName;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
@SuppressWarnings("unchecked")
public class BSHeaderHandler extends BasicHandler {
private static final long serialVersionUID = 1L;
private String operNum;//
private String checkNum;//
private String time;//
String endpoint = ServiceConstant.endpoint;//webservice
Map map = ServiceConstant.checkMap;// map
// service handler
// invoke() , SOAP msgContext
public void invoke(MessageContext msgContext) throws AxisFault {
boolean processedHeader = false;
try {
// Request SOAP
Message msg = msgContext.getRequestMessage();
SOAPEnvelope envelope = msg.getSOAPEnvelope();
SOAPHeader header = envelope.getHeader();
Iterator it = header.examineAllHeaderElements();
SOAPHeaderElement hel;
while (it.hasNext()) {
hel = (SOAPHeaderElement) it.next();
String headerName = hel.getNodeName();
if (headerName.equals("cp:MessageHeader")) {
// mustUnderstand true Header,
// " ", service
// Did not understand "MustUnderstand"
hel.setProcessed(true);
checkUser(hel);
processedHeader = true;
}
}
} catch (SOAPException e) {
throw new AxisFault(" SOAP Header.", e);
}
if (!processedHeader) {
throw new AxisFault(" SOAP Header ");
}
}
private void checkUser(SOAPHeaderElement hel) throws AxisFault {
String current = Util.dateToString(new Date(), "yyyy-MM-dd HH:mm:ss");//
MessageElement element1 = hel.getChildElement(new QName(
endpoint, "isLogin"));
MessageElement element2 = hel.getChildElement(new QName(
endpoint, "operNum"));
MessageElement element3 = hel.getChildElement(new QName(
endpoint, "checkNum"));
MessageElement element4 = hel.getChildElement(new QName(
endpoint, "time"));
// ,
if(null == element1 && null != element2 && null != element3 && null != element4){
operNum = element2.getValue();
checkNum = element3.getValue();
time = element4.getValue();
Boolean flag1 = false;
if(map.keySet().contains(operNum)){
CheckNumBean check = (CheckNumBean) map.get(operNum);
System.out.println(check.getCheckNum());
if(check.getCheckNum().equals(checkNum)){
flag1 = true;
}
}
Boolean flag2 = false;
if(flag1){
// soapHeader
Long between = countTime(time,current);
// ,
if(Math.abs(between) < 3600L){
flag2 = true;
}
}
if(!(flag1 && flag2)){
throw new AxisFault(" ");
}
// map
CheckNumBean check = (CheckNumBean) map.get(operNum);
check.setLastTime(check.getCurrentTime());
check.setCurrentTime(current);
} else if(null == element1 && (null == element2 || null == element3 || null == element4)){
throw new AxisFault(" ");
}
}
//
private Long countTime(String str1, String str2){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date begin = null;
Date end = null;
try {
begin = df.parse(str1);
end = df.parse(str2);
} catch (ParseException e) {
e.printStackTrace();
}
long between=(end.getTime()-begin.getTime())/1000;// 1000
return between;
}
}
클 라 이언 트 는 핸드 메 이 드 이 고 이쪽 클 라 이언 트 는 자바 ssh 구조 이기 때문에 사용자 정 보 를 저장 하고 메모리 에 의 해 완성 할 수 있 습 니 다.
클 라 이언 트 가 호출 될 때 soap Header 에 인증 정 보 를 넣 어야 합 니 다.
클 라 이언 트 코드 는 다음 과 같 습 니 다.
package com.wensi.service.client;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Date;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.encoding.XMLType;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.ser.ArrayDeserializerFactory;
import org.apache.axis.encoding.ser.ArraySerializerFactory;
import org.apache.axis.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.apache.axis.message.SOAPHeaderElement;
import com.wensi.common.Util;
import com.wensi.service.server.AccountCustomerBean;
import com.wensi.service.server.AccountFlag;
import com.wensi.service.server.AccountResponse;
import com.wensi.service.server.AuthorityBean;
import com.wensi.service.server.LoginResponse;
import com.wensi.service.server.OperatorBean;
import com.wensi.service.server.ServiceConstant;
public class ZNWServiceClient {
String endpoint = ServiceConstant.endpoint;//webservice
Service service = new Service();// service
public LoginResponse login(String userName,String password) throws Exception{
SOAPHeaderElement cpHeader = new SOAPHeaderElement(endpoint,"MessageHeader");
cpHeader.setPrefix("cp");
cpHeader.setMustUnderstand(true);
SOAPElement ele = null;
ele = cpHeader.addChildElement("isLogin");
ele.addTextNode("true");
// call
Call call = (Call) service.createCall();
// webservice call , call
URL url = new URL(endpoint);
call.setTargetEndpointAddress(url);
// webservice
call.setOperationName("login");
//
QName qn1 = new QName("urn:ZNWService","OperatorBean");
call.registerTypeMapping(OperatorBean.class, qn1, new BeanSerializerFactory(OperatorBean.class,qn1), new BeanDeserializerFactory(OperatorBean.class,qn1));
QName qn2 = new QName("urn:ZNWService","AuthorityBean");
call.registerTypeMapping(AuthorityBean.class, qn2, new BeanSerializerFactory(AuthorityBean.class,qn2), new BeanDeserializerFactory(AuthorityBean.class,qn2));
QName qn3 = new QName("urn:ZNWService","ArrayOfAuthorityBean");
call.registerTypeMapping(AuthorityBean[].class, qn3,new ArraySerializerFactory(),new ArrayDeserializerFactory());
QName qn4 = new QName("urn:ZNWService","LoginResponse");
call.registerTypeMapping(LoginResponse.class, qn4, new BeanSerializerFactory(LoginResponse.class,qn4), new BeanDeserializerFactory(LoginResponse.class,qn4));
call.addParameter("userName", org.apache.axis.Constants.XSD_STRING,ParameterMode.IN);
call.addParameter("password", org.apache.axis.Constants.XSD_STRING,ParameterMode.IN);
call.setReturnType(qn1, LoginResponse.class);
call.addHeader(cpHeader);
LoginResponse loginRes = (LoginResponse) call.invoke(new Object[]{userName,password});
return loginRes;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.