AXIS使用和配置_第1页
AXIS使用和配置_第2页
AXIS使用和配置_第3页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在某些场景中 AXIS提供很强大的功能,包括添加消息头,提供NTLM等多种认证方式,进行ACK发送的功能,具体参考 SAP的AXIS FQA本文档主要讲述 PI的AXIS部署以及自定handler,涉及2个handler, 个用于外围系统异步 发送系统的时候发生 ACK给外围系统,另一个是 PI采用Handler实现NTLM V2安全认证。PI7.31 SP15 ,PI7.4 SP10之后 SAP推出了针对 Apache HTTP Client library 的补丁,参考 note 2062567 -Integration of Apache HttpClient library in th

2、e PI Axis adapter 可以实现 NTLM V2。而 对于这2个补丁之前的版本 SAP不支持NTLM V2协议。本例的方法是根据 SAP的SP包中的 相关类进行反编译后的源代码封装成自己的handler类。首先 PI 要支持 AXIS,则需要部署 部署情况可以通过网址<host>:<port>/XIAxisAdapter/MessageServlet 进行校验。用到下面的类:common s-codec-1.9. jar (开始使用 1.3 版本,发现有 bug: java.lang.RuntimeException:java.la ng.NoSuchMet

3、hodError: m on s.codec.bi nary.Base64.(I)V;)httpclient-4.5.1.jar (NTLM V2 用到此包,下面的 2个包也一样)用工具sdaMakerTool进行压缩。如果是自己开发的handler类没有用到其他PI标准类的话也可以独立部署到这个包中,如果用到了其他类,其他的jar类也一并压缩到这个包中,并要进行加载,另外一种方式是把自定的handler类在SAP的axis sample adapter中实现,参考 AXIS 的 FQA.本文档中的两个类都是独立的类,用到的SAP标准的jar文件也压缩到其中。ACK handler类实现,网上

4、有这个blog,照着blog实现。代码如下。package.sap.aii.axis.sample.ha ndlers;importjava.io.ByteArra yin putStream;import jimport java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import jimport java.io.Stri ngWriter;importjava .ni o.charset.Charset;import jimport java.text.SimpleDateFormat;im

5、port java.util.Calendar;import java.util.Date;import jimport java.util.TimeZ one;importjavax.xml.parsers.Docume ntBuilderFactory;import javax.xml.soap.MessageFactory;import javax.xml.soap.MimeHeaders;import jimport jimport javax.xml.soap.SOAPMessage;import jimportjavax.xml.tra nsform.Source;import j

6、avax.xml.transform.Transformer;importjavax.xml.tran sform.Tra nsformerCo nfigurati on Exceptio n;import javax.xml.transform.TransformerFactory;importjavax.xml.transform.TransformerFactoryConfiguration Error;importjavax.xml.tra nsform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;impor

7、t javax.xml.transform.stream.StreamSource;import org.apache.axis.AxisFault;import org.apache.axis.Message;importorg.apache.axis.MessageC on text;importp onents.lo gger.LogFactory;importorg.apache.axis.ha ndlers.BasicHa ndler;import org.apache.axis.message.SOAPBodyElement;import org.apache.axis.messa

8、ge.SOAPEnvelope;import org.apache.axis.utils.XMLUtils;import mons.loggin g.Log;import orq.w3c.dom.Document;import org.w3c.dom.Element;import orq.w3c.dom.ls.DOMImplementationLS;import org.w3c.dom.ls.LSSerializer;public class ZRespon seHa ndlerexte nds BasicHa ndler protected static Log log =LogFactor

9、y. getLog (ZResp on seHa ndler.class .getName();public void in voke(MessageC on text msgC on text)throws AxisFault/* Resp onse han dler to write custom Ariba resp onse*/try Stri ng Msgd = msgC on text.getStrProp(log .info( "PI messageid is ""request.id");+Msgd);if (Msg_id.equals(

10、"")Msgd ="0001"Stri ng respTxt = createResp on seText(Msg_id);* Gett ing response soap message en velop and add* resp onse message to soap body*/MessageFactory messageFactory =MessageFactory .newln sta nce();MessageFactory messageFactory =neworg.apache.axis.soap.MessageFactorylmp

11、l();/ SOAPMessage curMsg = messageFactory.createMessage( newMimeHeaders(),/ newByteArra yin putStream(respTxt.getBytes(Charset.forName("UTF-8");/getSoapMessageFromStr in g(respTxt);/setValue(respTxt);/ SOAPMessage curMsg = messageFactory.createMessage();SOAPMessage msg = messageFactory.cre

12、ateMessage(newMimeHeaders(), newByteArrayinputStream(respTxt.getBytes(Charset.forName ( "UTF-8");curMsg.getSOAPPart().getE nvelope().setTextCo nte nt(respTxt); msgC on text.setMessage(msg);catch(Excepti on e) throw AxisFault. makeFault (e);private String createResp on seText(Stri ng msgid)

13、/ Get time stamp in GMT-800 format.Stri ng ts = getTimeStamp();"<?xml versio n="1.0"+String respText =en codi ng="UTF-8"?>rn""<SOAP-ENV:E nvelope八"><SOAP-ENV:Header/>rn"+"<SOAP-ENV:Body>" +"vcXML payloadlD="&quo

14、t;+payloadlD+ "" xml:la ng="e n"timestamp="" +ts+ "">rn"+"vResp on se>rn"+"vStatus code="200" text="OK"/>rn"+"<Msgd>"+msgid+ "</Msgd>"+"v/Resp on se>rn"+"&l

15、t;/cXML>rn" +"</SOAP-ENV:Body>rn"+"</SOAP-ENV:E nvelope"return respText;private Stri ng getTimeStamp()Date today =new Date();SimpleDateFormat sdf =newSimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ssZ");root.setAttribute("timestamp","2002-

16、03-12T18:39:09-08:00");sdf.setTimeZone(TimeZone.getTimeZone ("GMT-08:00");/ Stri ng zone = TimeZ on e.getAvailableIDs();/*for(i nt i =0;i<z one.len gth;i+)System.out.pri ntln(zon ei);*/Stri ng timeStamp = sdf.format(today);/ System.out.pri ntln (timeStamp);return timeStamp;主要是把PI产生

17、的MESSAGE I也一并反馈给外围系统用于跟踪与确认。PdianntersProcmmq Sequefic 丄1劃/NumberModulo NameTrpeModule Key1F_Mapter34sancierBe3riLocal EnteTrise Beanxkeq2*bF_AJaorfaxKLocal tuit? pne eana总a3CaiisacdaoierLocal Enterprfoe 9ean93P4甲切 q:可 2 / ? /v< ;2 , - .< .< '»'.I .IM. >u »<-AO Wv Hf

18、iAdfin'*KM»en« im MT.ktfaM<FnDBAO<,懈 SSAGFHEXER. M£S3A<«lO.acdnetft-fB31-41你 SCMCI.09UUE AP5</SYSIUME <BUCRS.VBU«S>/MRKS-.WIRCS*9QHATg<WJKRSgl«5WtRK3*.WR<S><itX3TrTOM>5VOGATC 2015-12-2> XftOCAT> vStPCTH QggBQTgxssAoentAX* e“5口叭

19、«U1 or more nepewon<CTEM>g:Agy<$TATSC2<.STA7U> itf<«Aftf_TFXI>(WWF?«Unf.TFn>pt»r8rnLocl Entopnvirrvso52.人1;泊33加站卜汕c erBearLocal Enterprise Sean8>:H8F_Pdapr>fd«s/h5iLocal Enbprm BeanxwesModute CwiigurationBHmnoModuieKeyPe8meter Namea:k"Pxwvq

20、X«05uidle-trpe nvduk pixil h«indltr frpv handler bpoParameteSuea>a:com sac aiLaxis.SMuple.handlersKesponse. up «ii.4xisj;i>l3WiibouiidH4ndi»ravBxom sap xiXI30inboundHandtorCT口 卜 tQAU WRfftpe wfatOMi 耐 g m xa>Mar>lf iwtlaO SO AM* 心心、 .SOAMMVOody. CXML .yUWFM* w

21、 s E*力7、Response.ctde-*2W te*>aOIT/刑 10 上68e600K:geirT2.".iT Reswne.<1ft Aut_ Hoa. Andu. 一 W_ M、HZx Atta<Kn«nU (0) 0 info (1 cixU)L<te«M AMer Cmr<«sMm*)eoDefwCMtriC»w CMn cwm“5«few« G«vww卜 ia- 2tlCot«WHSeMoaShmac.OjdCMOtnecMPmxaCmecK*v TWOO

22、rtNTLM Handler 类:package .sap.aii.axis.sample.ha ndlers;import java.io.ByteArrayOutputStream;importjava.io .1 OExceptio n;importjava .n et.URL;import java.util.ArrayList;import java.util.Hashtable;import java.util.Iterator;import javax.xml.soap.MimeHeader;import javax.xml.soap.MimeHeaders;importjava

23、x.xml.soap.SOAPExcepti on;import javax.xml.soap.SOAPPart;import org.apache.axis.AxisFault;importorg.apache.axis.C on sta nts;import org.apache.axis.Message;importorg.apache.axis.MessageC on text;importp onen ts. net.Com mon sHTTPClie ntProperties;importp onen ts. net.Com mon sHTTPClie ntPropertiesFa

24、ctory; importorg.apache.axis.ha ndlers.BasicHa ndler;importorg.apache.axis.message.SOAPE nvelope;importorg.apache.axis.soap.SOAPC on sta nts;importorg.apache.axis.tra nsport.http.HTTPC on sta nts;import org.apache.axis.utils.Messages;import org.apache.axis.utils.NetworkUtils;import mons.loggin g.Log

25、;import mons.loggin g.LogFactory;import org.apache.http.Header;import org.apache.http.HeaderEleme nt;importorg.apache.http.HttpE ntity;importorg.apache.http.HttpE ntityE nclos in gRequest;import orq.apache.http.HttpException;import org.apache.http.HttpHost;import orq.apache.http.HttpRequest;import o

26、rg.apache.http.HttpRequestlnterceptor;importorg.apache.http.HttpResp on se;importorg.apache.http.HttpVersio n;importorg.apache.http.ProtocolExceptio n;import org.apache.;import org.apache. ntials;importorg.apache. ntials;import org.apache.http.clie nt.AuthCache;import org.apache.http.clie nt.Crede n

27、tialsProvider;importorg.apache.http.clie nt.con fig.RequestC on fig;importorg.apache.http.clie nt.e ntity.E ntityBuilder;importorg.apache.http.clie nt.e ntity.GzipDecompress ingEn tity;importorg.apache.http.clie nt.methods.CloseableHttpResp on se;importorg.apache.http.clie nt.methods.HttpGet;importo

28、rg.apache.http.clie nt.methods.HttpPost;importorg.apache.http.clie nt.methods.HttpPut;importorg.apache.http.clie nt.methods.HttpRequestBase;importorg.apache.http.clie tocol.HttpClie ntCon text;importorg.apache.http.c on fig.RegistryBuilder;importorg.apache.http.c onn. socket.Pla inConn ecti on

29、 SocketFactory;importorg.apache.http.e ntity.AbstractHttpE ntity;importorg.apache.http.e ntity.C onten tType;import org.apache.;import org.apache.;importorg.apache. nt.BasicAuthCache;importorg.apache. nt.BasicCrede ntialsProvider;importorg.apache. nt.CloseableHttpClie nt;importorg.apache. nt.HttpCli

30、e ntBuilder;importorg.apache. nt.HttpClie nts;importorg.apache. onn .Pooli ngHttpClie ntConn ectio nMan ager;import org.apache.;importorg.apache.;import org.apache. ntityUtils;import.sap.aii.axis.tra nsport. net.AXISSocketFactory;import .sap.aii.axis.utils.JavaUtils;publicclassMy ntlmexte ndsBasicHa

31、 ndler /*/privatestaticfinallong serialVersi onUID= 1L;protectedstaticLog log = LogFactorygetLog(".sap.aii.axis.sample.handlers.Myntlm"Pla inConn ecti on SocketFactorypla insf;boolea ncheckForDefaultPort;booleanauthentication Preemptive;CloseableHttpClie nthttpclie nt ;Common sHTTPClie ntP

32、ropertiesclie ntPropertiesboolea nhttpChu nkStream ;public void in it()super .init();authentication Preemptive=Boolea n. valueOf (Stri ng)getOpti on("http.authe nticati on .preemptive").boolea nValue();clie ntProperties= Common sHTTPClie ntPropertiesFactory.create ();public My ntlm() /useC

33、hu nckedStream = true;clie ntProperties= n ull ;httpChu nkStream = true ;plai nsf= n ull ;/layeredsf = n ull;checkForDefaultPort= false ;/sen dAcceptE nc = false;in itialize();private void in itialize()plai nsf= new Plai nConn ectio nSocketFactory();/layeredsf = new IAIKHttpClie ntSocketFactory();Ip

34、ublicvoidinv oke(MessageC on text msgC on text)throws AxisFault HttpRequestBase method =n ull;HttpClie ntBuilder httpclie ntbuilder =n ull;httpclie nt=n ull;HttpE ntity respBody =n ull ;try URL targetURL =newURL(msgCo ntext.getStrProp("tra nsport.url");checkForDefaultPort=Boolea n.parseBoo

35、lea n(Stri ng)msgC on text.getProperty( "checkForDefaultPort");HttpClie ntCo ntext con text = HttpClie ntCo ntext.create ();httpclie ntbuilder = createHttpClie nt(msgC on text, con text,targetURL);RequestC onfig reqC onf = createRequestC on fig(msgC on text,targetURL,httpclie ntbuilder);bo

36、olea n restful = Boolea n.valueOf (msgCo ntext.getStrProp("e nableREST").boolea nV alue();boolea nposti ng = true ;Stri ng webMethod =null ;if (msgContext.getSOAPConstants() =SOAPConstants.SOAP12_CONSTANTS )webMethod = msgContext.getStrProp("soap12.webmethod" );if (webMethod = nu

37、ll )webMethod ="POST" ;elseposting = webMethod.equals("POST" ) |webMethod.equals( "PUT" );if (posting) if (webMethod.equalsIgnoreCase( "put" )method = new HttpPut(targetURL.getFile(); elsemethod = new HttpPost(targetURL.getFile(); else method = new HttpGet(tar

38、getURL.toURI();addContextInfo(method, reqConf, msgContext, targetURL);method.setConfig(reqConf);String httpVersion = msgContext.getStrProp("axis.transport.version");if (httpVersion !=null &&httpVersion.equalsIgnoreCase( "HTTP/1.0" )HTTP_1_0 );HTTP_1_1 );method.setProtocol

39、Version(HttpVersion. elsemethod.setProtocolVersion(HttpVersion.ByteArrayOutputStream binReq =new ByteArrayOutputStream();String contentType = "text/xml"Message reqMsg = msgContext.getRequestMessage();if (reqMsg != null ) if (restful) SOAPPart part = reqMsg.getSOAPPart();String types = part

40、.getMimeHeader( "Content-Type" );if (types !=null && types.length > 0)contentType = types0;if (!contentType.equalsIgnoreCase(method.getFirstHeader("Content-Type" ).getValue() method.removeHeaders( "Content-Type" ); method.addHeader( "Content-Type" ,

41、 contentType);null );reqMsg.setMessageContext(reqMsg.setProperty("javax.xml.soap.write-xml-declaration""false" );is: " ).append( newString(reqMsg.getSOAPPartAsBytes().toString(); else contentType = reqMsg.getContentType(msgContext.getSOAPConstants();reqMsg.writeTo(binReq);lo

42、g .debug( new StringBuilder().append("Content type of request message determined to:" ).append( contentType).toString();HttpEntity reqEntity =null ;if (posting) create ();)EntityBuilder reqBuilder = EntityBuilder. reqBuilder.setBinary(binReq.toByteArray(); if(msgContext.isPropertyTrue( &qu

43、ot;transport.http.gzipRequest"reqBuilder.gzipCompress();else if (reqBuilder.isGzipCompress()create (contentType);reqBuilder.gzipCompress();reqBuilder.setContentType(ContentType.reqEntity = reqBuilder.build(); if (method.containsHeader(HTTPConstants.HEADER_TRANSFER_ENCODING ) log .debug( "r

44、emoving old content encoding value.");method.removeHeaders(HTTPConstants. HEADER_TRANSFER_ENCODING );log .debug( new StringBuilder().append("setting chunkedto " ).append( httpChunkStream ).toString(); (AbstractHttpEntity)reqEntity).setChunked( httpChunkStream );(HttpEntityEnclosingReq

45、uest) method).setEntity(reqEntity);targetURLHttpHost target = new HttpHost(targetURL.getHost(),"target configuredto:.getPort(), targetURL.getProtocol(); httpclient = httpclientbuilder.build(); log .debug( new StringBuilder().append(").append(target.toString().append(" and callingit .&

46、quot;.toString();CloseableHttpResponse resp =httpclient.execute(target,method,context);int respCode = resp.getStatusLine().getStatusCode(); log .debug( new StringBuilder().append("Called successfully with HTTP code:" ).append(respCode).toString();contentType = getHeader(resp, "Content

47、-Type" );String contentLocation= getHeader(resp,"Content-Location"String contentLength = getHeader(resp, if (respCode <= 199 | respCode >= 300)"Content-Length"););&& ( "text/html".equalsIgnoreCase(contentType)| respCode <= 499 | respCode >= 600)

48、 String statusMessage =resp.getStatusLine().getReasonPhrase();AxisFault fault =new AxisFault("HTTP", ( newStringBuilder().append( "(" ).append(respCode).append( ")" ).append(null , null);statusMessage).toString(),( "return01""" ).append(resp.getEntit

49、y()fault.setFaultDetailString(Messages. getMessage( new StringBuilder().append( EntityUtils. toString .toString();fault.addFaultDetail(Constants. QNAME_FAULTDETAIL_HTTPERRORCODE Integer. toString (respCode);throw fault;respBody = resp.getEntity();Header contEnc = respBody.getContentEncoding();if (co

50、ntEnc != null ) HeaderElement elems = contEnc.getElements();HeaderElement arr$ = elems;int len$ = arr$. length ;for ( int i$ = 0; i$ < len$; i$+) HeaderElement el = arr$i$;if ( "gzip".equalsignoreCase(el.getName() respBody = new GzipDecompressingEntity(respBody); resp.setE ntity(respBod

51、y);Header resp on seHeaders = resp.getAllHeaders();Stri ng enc = En tityUtils.getConten tCharSet(respBody);if (enc =n ull )enc ="iso-8859-1"Message outMsg = n ull ;log .debug( new StringBuilder().append("Content type of response message determ ined to:").append(conten tType).toSt

52、ri ng();if (restful) outMsg = newMessage(JavaUtils.createXML in putStream(respBody.getCo nten t(), enc,"UTF-8", false ), falseconten tType, conten tLocati on);outMsg.getSOAPPart().setMimeHeader("Conten t-Type"conten tType);try outMsg.setProperty( catch"javax.xml.soap.charact

53、er-set-e ncodi ng" "UTF-8");(SOAPException e) e);log .debug( "Error whilesettingmessage encoding" else if (contentLength !=null&& "0" .equalsignoreCase(contentLength)outMsg = new Message( new SOAPE nvelope();elsefalseoutMsg = new Message(respBody.getC onten

54、 t(),conten tType, conten tLocati on);outMsg.getSOAPPartAsStri ng();MimeHeaders resp on seMimeHeaders = outMsg.getMimeHeaders(); for (int i = 0; i < resp on seHeaders.len gth; i+) Header resp on seHeader = resp on seHeadersi; resp on seMimeHeaders.addHeader(resp on seHeader.getName(),resp on seHe

55、ader.getValue();outMsg.setMessageType("resp on se");msgC on text.setResp on seMessage(outMsg);if (msgC on text.getMa intain Sessi on() len gth; i+) Header headers = resp.getAllHeaders();for ( int i = 0; i < headers. if(headersi.getName().equalslg no reCase("Set-Cookie" ) han d

56、leCookie( "Cookie" , headersi.getValue(), msgC on text);con ti nueif"Set-Cookie2" )"Cookie2" , headersi.getValue(),(headersi.getName().equalsIg no reCase(han dleCookie(msgC on text); catch(Exception e) log .debug( "Error ", e);throw new AxisFault( "Error

57、while invoking HttpClientSender:,e);if ( httpclient != null )try httpclie nt.close(); catch(lOException e) ,e);log .debug( "Error while closing http client:"try httpclie nt .close(); catch (lOException e) log .debug( "Error while closing http client: ", e);public voidhan dleCookie(Stri ng cookieName, Stri ng acookie,MessageC on text msgC on text) Stri ng ck = acookie.split(",");ArrayList cookies =new ArrayListO;for ( int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论