# 应用于控制å°
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=GBK
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 用于数æ®åº?br />#log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/ww
#log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
#log4j.appender.DATABASE.user=rootÂ
#log4j.appender.DATABASE.password=123
#log4j.appender.CONSOLE.Threshold=WARN
#log4j.appender.DATABASE.sql=INSERT
INTO LOG4J(stamp,thread, infolevel,class,messages) VALUES
('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m')
# INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n')
# 写入数æ®åº“ä¸çš„表LOG4Jçš„Messageå—æ®µä¸ï¼Œå†…容åQ…dåQˆæ—¥æœŸï¼‰%c: æ—¥å¿—ä¿¡æ¯æ‰€åœ¨åœ°åQˆç±»å)%p: 日志信毾U§åˆ«%m: 产生的日志具体信æ?%n: è¾“å‡ºæ—¥å¿—ä¿¡æ¯æ¢è¡Œ
#log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
#log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# æ¯å¤©æ–°å¾æ—¥å¿—
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=C:/log4j/log
log4j.appender.A1.Encoding=GBK
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L : %m%n
#应用于文�br />log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=C:/log4j/file.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.Encoding=GBK
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
# 应用于文件回�br />log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLING_FILE.Threshold=ERROR
log4j.appender.ROLLING_FILE.File=rolling.log
log4j.appender.ROLLING_FILE.Append=true
log4j.appender.CONSOLE_FILE.Encoding=GBK
log4j.appender.ROLLING_FILE.MaxFileSize=10KB
log4j.appender.ROLLING_FILE.MaxBackupIndex=1
log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
log4j.appender.im.host = mail.cybercorlin.net
log4j.appender.im.username = username
log4j.appender.im.password = password
log4j.appender.im.recipient = corlin@cybercorlin.net
log4j.appender.im.layout=org.apache.log4j.PatternLayout
log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
#应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender
log4j.appender.SOCKET.RemoteHost=localhost
log4j.appender.SOCKET.Port=5001
log4j.appender.SOCKET.LocationInfo=true
# Set up for Log Facter 5
log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout
log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n
# Log Factor 5 Appender
log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
# å‘逿—¥å¿—给邮äšg
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=FATAL
log4j.appender.MAIL.BufferSize=10
log4j.appender.MAIL.From=web@www.wuset.com
log4j.appender.MAIL.SMTPHost=www.wusetu.com
log4j.appender.MAIL.Subject=Log4J Message
log4j.appender.MAIL.To=web@www.wusetu.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
ä½? å¯ä»¥ä½¿ç”¨ Web Service Appender ž®†æ—¥å¿—集ä¸åˆ°æŸä¸€ä½ç½®åQŒåŒæ—Óž¼ŒWeb Service Appender å…许½Ž¡ç†è€…监控ã€å¼€å‘者调试é¢å‘æœåŠ¡æž¶æž?SOA)环境里å¯èƒ½å˜åœ¨çš„ä»ÖM½•问题。Web Service Appender 是一¿U扩å±?JAVA ¾c»ï¼Œå®ƒç”± Log4j çš?Appender ¾cÀL‰©å±•而æ¥ã€?/p>
从定义上看,SOA 是一¿Uå½¼æ¤å¯ä»¥äº’ç›”R€šä¿¡çš„æœåŠ¡é›†åˆï¼Œä½†è¿™äº›æœåŠ¡çš„å†…å®¹æ˜¯å„自独立的åQŒæ¯ä¸€¾cÀLœåŠ¡å‡ä¸å—其它æœåŠ¡å†…å®¹æˆ–æœåŠ¡çŠ¶æ€çš„å½±å“åQŒåƈ且这些æœåŠ¡éƒ½å·¥ä½œåœ¨åˆ†å¸ƒå¼çš„ç³»¾lŸæž¶ 构里。在 SOA ä¸ï¼ŒWeb æœåŠ¡é€šå¸¸è¢«ç”¨æ¥åœ¨¾l™å®šäº‹åŠ¡ä¸å¤„ç†è¯·æ±‚,˜q™äº›è¯äh±‚å¯ä»¥æ˜¯é—留代ç ã€ä¼ä¸šçñ” Java Beans(EJBs) çš„å°è£…,也å¯ä»¥æ˜¯ Java ¾cÈš„ž®è£…åQŒä‹É用一¿Uå¯ä»¥å°†æ—¥å¿—ä¿¡æ¯èšé›†åœ¨ä¸å¿ƒä½¾|®é‡Œçš„æ—¥å¿—纪录方法,能帮助您隔离¾~ºé™·å’Œé—®é¢˜ï¼Œòq¶èƒ½è®©ä½ 更好的ç†è§£é€»è¾‘‹¹çš„处ç†ã€?
ž®†ç‰¹å®šæ¨¡å—或æœåŠ¡çš„æ—¥å¿—æ¶ˆæ¯çºªå½•到一个ä¸å¿ƒä½¾|®çš„æœºåˆ¶åQŒå¯ä»¥æŠŠå¯èƒ½æ½œåœ¨çš„问题和¾~ºé™·é™ä½Žåˆ°æœ€ž®ã€?/p>
本文å¯?Log4j 的功能进行了大体的概˜qŽÍ¼Œòq¶ä»‹¾l了如何¾~–写自定义的 Log4j AppenderåQŒè¿™¾cȉ¹ŒDŠçš„ Appender ž®†æ—¥å¿—消æ¯ç¼–åˆîC¸€¿U特定的 Web æœåŠ¡ã€?/p>
![]() ![]() |
![]()
|
Log4j 是一¿U开放æºä»£ç 的日志库åQŒå®ƒå·²è¢«å‘展ä¸?Apache Software Foundation 日志æœåŠ¡™å¹ç›®çš„å™å¹ç›®ã€‚该库是ä»?IBM åœ?90 òq´ä»£æœ«å¼€å‘çš„æ—¥å¿—åº“äØ“åŸºç¡€çš„ï¼Œ½W¬ä¸€ç‰ˆå‘布于 1999 òq´ã€‚现在它在开放æºä»£ç 团体得到了广泛ä‹É用,它的体系是围¾l•ä»¥ä¸‹ä¸‰ä¸ªä¸»è¦æ¦‚忉|ž„廸™“væ¥çš„åQ?/p>
˜q™äº›æ¦‚念å¯ä»¥è®©æ‚¨æ ÒŽ®æ¶ˆæ¯¾cÕdž‹ã€æ¶ˆæ¯ä¼˜å…ˆçñ”æ¥çºªå½•消æ¯ï¼Œæ‚¨å¯ä»¥æŽ§åˆ¶æ¶ˆæ¯åœ¨ä½•处¾l“æŸåŠæ¶ˆæ¯å¦‚ä½•æ ¼å¼åŒ–ã€?
Logger 是应用程åºé¦–先调用以åˆå§‹åŒ–消æ¯çºªå½•的对象。当把æŸä¸€æ¶ˆæ¯ä¼ 递给日志æ—Óž¼Œlogger 会生æˆ?LoggingEvent
åQŒå¯¹æ¶ˆæ¯˜q›è¡Œž®è£…。之åŽï¼ŒLogger 对象ž®?LoggingEvent
ä¼ é€’ç»™ä¸Žä¹‹å…Œ™”çš?Appenderã€?/p>
Appender ž®?LoggingEvent
所包å«çš„æ¶ˆæ¯å‘é€ç»™æŒ‡å®šçš„ç›®æ ‡è¾“å‡ºæ–‡ä»¶ã€‚æ‰€è°“æŒ‡å®šçš„æ–‡äšgåQŒå¤§å¤šæ•°æƒ…况下,æ˜?Log4 属性文件。一äº?Appender å˜åœ¨äº?Log4j ä¸ã€‚您也å¯ä»¥æ‰©å±?AppenderåQŒä‹É之支æŒå…¶å®ƒçš„ç›®æ ‡æ–‡äšgåQŒæ¯”å¦?XML æ–‡äšgã€æŽ§åˆ¶å°½{‰ç‰ã€?/p>
�Log4j 里, LoggingEvent
被赋予æŸä¸€¾U§åˆ«åQŒä»¥è¡¨æ˜Žå®ƒä»¬çš„优先çñ”。缺çœçš„¾U§åˆ«åŒ…æ‹¬å¦‚ä¸‹å‡ ç§åQ?
![]() ![]() |
![]()
|
客户ç«?log4j.properties æ–‡äšg
客户ç«?log4j.properties æ–‡äšg是一¿Uæ ‡å‡†æ–‡ä»Óž¼Œå®ƒåŒ…嫿œåŠ¡æˆ–æ¨¡å—使用的所æœ?Appender。Web Service Appender è¦æ±‚有一ä¸?i>端点åQˆendpointåQ?/i> 属性以指定所使用的日志æœåŠ¡ã€?/p>
æ¸…å• 1 æè¿°äº†ä‹Éç”?WebServiceAppender
所必需çš?Web æœåŠ¡å®¢æˆ·ç«?Log4j 属性ã€?黑体昄¡¤ºçš„æ–‡æœ¬æŒ‡æ˜Žäº†ž®†è®¿é—?WebServiceAppender
æœåŠ¡å™¨ç«¯çš?Appender。属性文件是使用 Log4j 的基本需求,它å¯ä»¥è®©æ‚¨é…¾|®åº”用程åºä»¥ä½¿ç”¨å¤šä¸ª Appender ä»¥åŠ logging severity。一旦应用程åºè¿›å…¥è¿è¡ŒçŠ¶æ€æˆ–潜在的问题得到解冻I¼Œæ‚¨å°±å¯ä»¥è½ÀL¾åœîC¿®æ”¹å±žæ€§æ–‡ä»¶ã€?/p>
æ¸…å• 1åQšå®¢æˆïL«¯ Log4j 的属性文ä»?/b>
#set the level of the root logger
log4j.rootLogger = INFO, CONSOLE
#set own logger
log4j.logger.com.carmelouria.logging.test=CONSOLE
log4j.appender.CONSOLE=com.carmelouria.logging.WebServiceAppender
log4j.appender.CONSOLE.endpoint=
http://localhost:9080/log4j/services/LogAppenderService
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%p [%t] %c{2} (%M:%L) :: %m%n回页�/b>
æœåŠ¡å™¨çš„ Log4j.properties æ–‡äšg
æœ? 务器 Log4j.properties æ–‡äšg被用æ¥å…³è”客æˆïL«¯ Log4j 属性文ä»Óž¼Œå®ƒæŒ‡å®šäº†æ—¥å¿—çš„çñ”åˆ«åŠæœåŠ¡å™¨å°†å¦‚ä½•è¾“å‡ºæ¶ˆæ¯ã€‚对于支æŒ? Log4j 的应用程åºï¼Œæ‚¨å¯ä»¥å®šä¹‰å¤šä¸?appender。当ç„Óž¼Œ˜q™äº› appender æ—¢å¯ä»¥ç”¨äºŽå®¢æˆïL«¯æœåŠ¡åQŒä¹Ÿå¯ä»¥ç”¨äºŽæœåŠ¡æ¨¡å—ã€?/p>
æ¸…å• 2 æè¿°äº†ä¸€ä»½å…¸åž‹çš„ Log4j 属性文ä»Óž¼ŒæœåŠ¡å™¨ç«¯çš?WebServiceAppender
使用¾~ºçœçš?Log4j Appenders。æœåŠ¡å™¨ç«¯çš„ Appender å¯ä»¥æ½œåœ¨çš„调用å¦ä¸€ä¸?WebServiceAppender
åQŒåƈž®†æ—¥å¿—ä¿¡æ?i>链接èµäh¥åQ?/p>
æ¸…å• 2åQšæœåŠ¡å™¨ç«¯çš„ Log4j 属性文ä»?/b>
#set the level of the root logger
log4j.rootLogger = INFO, FILE
#set own logger
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.file=c:/temp/log4j/server/server.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%p [%t] %c{2} (%M:%L) :: %m%n
å®¢æˆ·ç«¯ç¨‹åºæµ‹è¯•示例:
˜q™ä¸ªå®¢æˆ·ç«¯ç¨‹åºç¤ºä¾‹æ˜¯æ— æ ¼å¼æ™®é€?Java 对象(POJO)åQŒå®ƒè®°å½•äº†ä¸€æ¡æ¶ˆæ¯ï¼Œòq¶è¢«é…ç½®ä¸ÞZ‹Éç”?Web Service Appender æ¥å¤„ç†æ¶ˆæ¯ã€?a >æ¸…å• 3 昄¡¤ºäº†è¿™ä¸ªç¤ºä¾‹ï¼š
|
![]() ![]() |
![]()
|
WebServiceAppender
是必需的,它å¯ä»¥å°†æ¶ˆæ¯å‘é€åˆ°æŒ‡å®šçš?Web æœåŠ¡ã€?code>WebServiceAppender ¾l§æ‰¿äº?org.log4j.AppenderåQŒå®ƒå…许使用 log4.propertiesåQŒåƈæˆäؓ有效çš?Log4j Appenderã€?/p>
WebServiceAppender 使用åŸÞZºŽ XML 的远½E‹è¿‡½E‹è°ƒç”?(JAX-RPC) çš?Java APIåQŒæ¥ž®†æ¶ˆæ¯å‘é€åˆ°æœåŠ¡å™¨ã€‚JAX-RPC 是一¿U规范,它æ˜qîC‹Éç”? RPC å’?XML æž„å¾ Web æœåŠ¡å’?Web æœåŠ¡å®¢æˆ·ç«¯çš„åº”ç”¨¾~–ç¨‹æŽ¥å£ (API) 和约定。JAX-RPC åˆè¢«¿UîCØ“ JSR 101ã€?/p>
LoggingEvent
通过 SOAPElement
è¢«åˆ†å‰²åÆˆè¡¨ç¤ºä¸?XML。javax.xml.soap.SOAPElement æŽ¥å£æ„å‘³ç€æœåŠ¡ç«¯ç‚¹æŽ¥å£ž®†åŒ…å«ä¸€ä¸ªå‚敎ͼŒæˆ–è¿”å›?javax.xml.soap.SOAPElement ¾cÕdž‹çš„å€û|¼Œä»¥å¯¹åº”于 schema 䏿¯ä¸ªä‹Éç”?code><xsd:any/>的地æ–V€‚从本质上看åQŒå®ƒæ˜?XML 傿•°çš„å°è£…,且没有相应的åºåˆ—åŒ?ååºåˆ—化 JAVA ¾c…R€‚例如,一旦客戯‚¯·æ±‚记录一个消æ¯ï¼Œž®×ƒ¼šåˆ›å¾ä¸€ä¸?LoggEvent
对象åQŒç„¶åŽä¼ é€ç»™ Appender。在˜q™ç§æƒ…况下,Appender ž®±æ˜¯ WebServiceAppender
。Appender ‹‚€ç´¢äº‹ä»Óž¼Œòq¶åœ¨è§£æžäº‹äšgä¸çš„ä¿¡æ¯ã€‚一些é¢å¤–的信æ¯ä¼šè¢«åŠ å…¥åQŒå¦‚ä¸ÀLœºåç§°åQŒè¿™æ äh‚¨ž®ÞqŸ¥é“è¿™äº›æ¶ˆæ¯æ¥è‡ªå“ªä¸ªç³»¾lŸã€‚åŒæ—Óž¼Œappend æ–ÒŽ³•也将消æ¯è½¬æ¢ä¸?SOAPElement
åQŒè¿™æ ·å°±å¯ä»¥é€šè¿‡ executeWebService
æ–ÒŽ³•ž®†æ¶ˆæ¯ä¼ 递给 Web æœåŠ¡ã€‚ä‹Éç”?SOAPElement
充分考虑�WebServiceAppender
未æ¥ç‰ˆæœ¬çš„坿‰©å±•性问题ã€?/p>
清å•4åQ𿉧è¡?WebServiceAppender æœåŠ¡çš?Append æ–ÒŽ³•
|
ä¸å¹¸çš„æ˜¯åQŒLog4j çš?LoggingEvent
æ²¡æœ‰åŒ…å« HostnameåQŒè€?Hostname æ˜?Web Service Appender ä¼—å¤šéœ€æ±‚ä¹‹ä¸€ã€‚åœ¨åˆ›å¾ SOAPElement
以å‰åQŒæ‚¨å¯ä»¥ç”¨ä¸‹é¢çš„è¯å¥ž®?Hostname æ·ÕdŠ åˆ?XML æ–‡äšg里:
String hostName = "<hostname>" + InetAddress.getLocalHost() + "</hostname>";
SoapElementFactory
是主è¦ç”¨äºŽåˆ›å»?SOAPElement
çš„ç±»ã€‚å®ƒåŒæ—¶æ”¯æŒåˆ›å¾ IBM å’?Java çš?SOAPElement
实现åQŒå¦‚æ¸…å• 5 所½Cºï¼š
|
SoapClient
¾cÕd°è£…了 Call
接å£çš?JAX-RPC 实现åQŒjavax.xml.rpc.Call æŽ¥å£æä¾›äº†å¯¹æœåŠ¡ç«¯ç‚¹åŠ¨æ€è°ƒç”¨çš„æ”¯æŒã€‚javax.xml.rpc.Service 接壞®±å¥½è±¡æ˜¯åˆ›å¾ Call
实例的工厂�/p>
æ¸…å• 6 说明了客æˆïL«¯å¦‚何动æ€è°ƒç”¨æœåŠ¡ã€‚è¿™å…许å¯ÒŽœåŠ¡è¿›è¡Œå˜æ›ß_¼Œè€Œæ— 需生æˆå®¢æˆ·ç«¯ä»£ç†æ¥è®‰K—®˜qœç¨‹æœåŠ¡ã€?/p>
æ¸…å• 6åQšä‹Éç”?SoapClient ¾cÈš„调用æ–ÒŽ³•
|
![]() ![]() |
![]()
|
Log4j.server.properties æ–‡äšg包å«äº†ä¸€ä¸ªåŸºæœ¬çš„ Log4j é…置文äšgåQŒè¯¥æ–‡äšgå¯ä»¥è®©æ‚¨æŒ‡å®šæŠŠå“ªäº›æ—¥å¿—å‘é€ç»™ Web æœåŠ¡¾pÈ»Ÿã€?/p>
æ¸…å• 7åQšLog4j.server.properties æ–‡äšg
|
LogAppenderBean.java æ˜?Web Service Appender æœåŠ¡æ‰€è¦ä‹É用的 EJB。该æœåŠ¡å¯åЍ LogAppenderBean
ä»¥å¤„ç†æ¥è‡ªæ¯ä¸?Web Service Appender 客户端的æ¯ä¸€ä¸ªè¯·æ±‚ã€?/p>
æ¸…å• 8 昄¡¤ºäº†æ¥è‡?WebServiceAppender
EJB çš?log æ–ÒŽ³•åQŒè¯¥æ–ÒŽ³•è§£æžæ¥è‡ªå®¢æˆ·ç«¯çš„æ¶ˆæ¯åQŒåƈž®†å®¢æˆïL«¯ä¿¡æ¯¾Uªå½•到æœåŠ¡çš„æœåŠ¡å™¨ç«¯ã€?/p>
æ¸…å• 8åQšLogAppenderBean çš?log æ–ÒŽ³•
|
通过 IBM SOAPElement
çš?InputSourceåQŒæ¯ä¸€ä¸?SOAPElement
的内定wƒ½ä¼šè¢«‹‚€ç´¢ã€‚ç›®å‰ï¼Œåªæœ‰ IBM WebSphere] Application Server (Application Server) 支挘q™äº›ä»£ç åQˆè¯·å‚阅å‚考资æ–?/a>åQ‰ã€?然而,如果您移é™?IBM SOAPElement
åQŒé‚£ä¹ˆæ‚¨ž®±å¯ä»¥åœ¨ä»ÖM½•应用æœåŠ¡å™¨ä¸Šä½¿ç”¨˜q™äº›ä»£ç 。IBM
SOAPElement
内置的性能优化也适用�Application Server�/p>
![]() ![]() |
![]()
|
下é¢çš„示例展½CÞZº† Web Service Appender çš„å¯èƒ½çš„输出åQ?/p>
INFO [WebContainer : 0] ejb.LogAppenderBean (log:?) :: [1111513482641:OO7-64BIT/9.48.114.183:main]LoggingSample instantiation...
OO7-64BIT/9.48.114.183 是机器åå’?IP 地å€åQŒè€?main 是日志所在处的方法åã€?/p>
![]() ![]() |
![]()
|
Web
Service Appender 是将日志集ä¸åˆ°æŸä¸€ä½ç½®çš„基本工兗÷€‚ç”±äº?Web Service Appender æ˜?Log4j çš?
Appender ¾cÈš„å集åQŒå› 而酾|®å’Œä½¿ç”¨ Appender 都éžå¸¸ç®€å•易懂。您å¯ä»¥ä¿®æ”¹ Log4j 的属性文ä»Óž¼Œ˜q™æ ·åQŒä‹Éç”?Log4j
的现有应用程åºå’ŒæœåŠ¡ž®±å¯ä»¥é©¬ä¸Šä‹Éç”?Web Service Appenderã€?/p>
![]() ![]() |
![]()
|
æè¿° | åå— | å¤§å° | ä¸‹è²æ–ÒŽ³• |
---|---|---|---|
Foundation Class Library | foundation.zip | 47 KB | HTTP |
Logging Web Service J2EE Application | LoggingWebService.ear | 1976 KB | HTTP |
Unit Test Sample Code | SoapClientTest.java | 5 KB | HTTP |