axis2 笔记

[color=blue]1. MTOM优先于Swa[/color]<parameter name="enableMTOM">true</parameter>
<parameter name="enableSwA">true</parameter>
if axis2.xml was configed as above, enableSwA was unenabled because enableMTOM has a high priority.
Now if you try get the haldler, you will get null.

[color=blue]2. when download(upload) a large file from server, countering the exception below.[/color]
Exception in thread "HttpConnection-8080-2" java.lang.IllegalStateException: Res
ponse already committed
(Client.java)
options.setProperty(Constants.Configuration.CACHE_ATTACHMENTS,Constants.VALUE_TRUE);
options.setProperty(Constants.Configuration.ATTACHMENT_TEMP_DIR,"D:/");
options.setProperty(Constants.Configuration.FILE_SIZE_THRESHOLD, "4000");
When we uoload a large file.(axis2.xml)
<parameter name="cacheAttachments">true</parameter>
<parameter name="attachmentDIR">D:/</parameter>
<parameter name="sizeThreshold">4000</parameter>

[color=blue]3.延长上传下载时间。[/color]
// Increase the time out when sending large attachments
options.setTimeOutInMilliSeconds(1000);
Exception Read out
options.setTimeOutInMilliSeconds(1000000);

[color=blue]4. The input stream for an incoming message is null.[/color]
org.apache.axis2.AxisFault: The input stream for an incoming message is null.
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:71)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:326)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at com.XXX.XXX.axis2.sample.attachment.client.AttachmentClient.downloadFile(AttachmentClient.java:84)
at com.XXX.XXX.axis2.sample.attachment.client.AttachmentClient.main(AttachmentClient.java:48)
Then I found targetEPR is ERROR.
private static EndpointReference targetEPR = new EndpointReference(
"http://localhost:8080/sample/services/AttachmentService");


[color=blue]5.JMS config[/color]
Caused by: javax.jms.JMSException: Could not connect to broker URL: tcp://localhost:61616?wireFormat.maxInactivityDuration=0. Reason: java.net.ConnectException: Connection refused: connect
Make Sure you have start ActiveMQ

When use JMS (ActiveMQ Implement)transport,it is required to make the following JAR files available: activeio-core-3.0-beta1.jar, activemq-core-4.0-RC2.jar, geronimo-j2ee-management_1.0_spec-1.0.jar at a minimum


<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?wireFormat.maxInactivityDuration=0</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?wireFormat.maxInactivityDuration=0</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?wireFormat.maxInactivityDuration=0</parameter>
<parameter name="transport.jms.ConnectionFactoryJNDIName">QueueConnectionFactory</parameter>
</parameter>
</transportReceiver>
Add paramter "?wireFormat.maxInactivityDuration=0" to java.naming.provider.url.


[color=blue]6,org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog[/color]
tcp://localhost:6060/sample/services/TCPCustomerService;
tcp://localhost:6060/axis2/services/TCPCustomerService

org.apache.axis2.AxisFault: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:417)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:89)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:326)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at com.XXX.XXX.axis2.sample.stub.custdir.TCPCustomerServiceStub.searchCustomer(TCPCustomerServiceStub.java:1091)
at com.XXX.XXX.axis2.sample.transport.client.TCPClient.doSearchCustomer(TCPClient.java:92)
at com.XXX.XXX.axis2.sample.transport.client.TCPClient.run(TCPClient.java:57)
at com.XXX.XXX.base.standalone.AppRunner.run(AppRunner.java:38)
at com.XXX.XXX.axis2.sample.transport.client.TCPClient.main(TCPClient.java:222)
Caused by: org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:239)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:161)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:110)
at org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:609)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:178)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:111)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:87)
... 9 more
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
at [row,col {unknown-source}]: [1,0]
at com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:661)
at com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2134)
at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2040)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:153)
... 15 more
[TCPClient] Operation completed in 16350ms.


[2008-06-25 16:45:48.853] Unable to parse request URL [tcp://localhost:6060/samp
le/services/TCPCustomerService][axis2/services]

[2008-06-25 16:46:04.749] The [action] cannot be processed at the receiver.

org.apache.axis2.AxisFault: The [action] cannot be processed at the receiver.
at org.apache.axis2.addressing.AddressingFaultsHelper.triggerAddressingF
ault(AddressingFaultsHelper.java:355)
at org.apache.axis2.addressing.AddressingFaultsHelper.triggerActionNotSu
pportedFault(AddressingFaultsHelper.java:320)
at org.apache.axis2.handlers.addressing.AddressingValidationHandler.chec
kAction(AddressingValidationHandler.java:140)
at org.apache.axis2.handlers.addressing.AddressingValidationHandler.invo
ke(AddressingValidationHandler.java:53)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:132)
at org.apache.axis2.transport.tcp.TCPWorker.run(TCPWorker.java:88)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Wor
ker.runTask(ThreadPoolExecutor.java:650)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Wor
ker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)
[2008-06-25 16:46:04.921]

java.lang.NullPointerException
at org.apache.axis2.handlers.soapmonitor.SOAPMonitorHandler.getMessageId
(SOAPMonitorHandler.java:130)
at org.apache.axis2.handlers.soapmonitor.SOAPMonitorHandler.invoke(SOAPM
onitorHandler.java:81)
at org.apache.axis2.engine.Phase.invoke(Phase.java:292)
at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:212)
at org.apache.axis2.engine.AxisEngine.sendFault(AxisEngine.java:468)
at org.apache.axis2.transport.tcp.TCPWorker.run(TCPWorker.java:104)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Wor
ker.runTask(ThreadPoolExecutor.java:650)
at edu.emory.mathcs.backport.java.util.concurrent.ThreadPoolExecutor$Wor
ker.run(ThreadPoolExecutor.java:675)
at java.lang.Thread.run(Thread.java:595)




Axis2是常用的一种SOAP engine,但是它提供的wsdl2java的命令行工具的说明比较简单,没有具体的例子。下面举出几个例子:
从最简单的开始 ,-uri 指定wsdl文件
> WSDL2Java -uri currencyConvert.wsdl
-d 使用不同的data binding方法
> WSDL2Java -uri currencyConvert.wsdl -d xmlbeans
-a 生成异步的方法
> WSDL2Java -uri currencyConvert.wsdl -a
-t 生成测试case
> WSDL2Java -uri currencyConvert.wsdl -t ...
稍微复杂一些的,-p可以指定生成的package,-o指定生成的路径,-ss生成服务端代码
wsdl2java -uri ../wsdl/currencyConvert.wsdl -o ../gen_src -ss -sd -g -p foo.bat
再复杂一些,-ns2p 将namespace进行替换,多个中间用逗号隔开
wsdl2java -uri ../wsdl/currencyConvert.wsdl -o ../wsdl/gen_src -ss -sd -g -p com.foo.bar -ns2p "http://www.xxx.yyy.com/zzz/v1.0"=com.foo.bar,"http://www.xxx.yyy.com/ddd/v1.1"=com.foo.bar.goo

wsdl2java模板及其参数介绍
axis版本为1.2RC3

wsdl2java.bat

SET AXIS_HOME=D:\mywork\Sea\WebRoot\WEB-INF\lib\
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%axis.jar;%AXIS_HOME%jaxrpc.jar;%AXIS_HOME%saaj.jar;%AXIS_HOME%commons-logging.jar;%AXIS_HOME%commons-discovery.jar;%AXIS_HOME%wsdl4j.jar;%AXIS_HOME%mail.jar;%AXIS_HOME%activation.jar;%AXIS_HOME%commons-httpclient-3.0-alpha1.jar;.
java org.apache.axis.wsdl.WSDL2Java -a -t -p com.sea.ws.passportstub -o D:\mywork\Sea\src http://10.5.0.143/passportWsApi/services/PassportSeaOnlineApi?wsdl
java org.apache.axis.wsdl.WSDL2Java -a -t -p com.sea.ws.seastub -o D:\mywork\Sea\src http://10.5.0.143/sea/services/Sea?wsdl

参数介绍
Usage: java org.apache.axis.wsdl.WSDL2Java [options] WSDL-URI
Options:
-h, --help
print this message and exit
-v, --verbose
print informational messages
-n, --noImports
only generate code for the immediate WSDL document
-O, --timeout <argument>
timeout in seconds (default is 45, specify -1 to disable)
-D, --Debug
print debug information
-W, --noWrapped
turn off support for "wrapped" document/literal
-q, --quiet
do not print any informational or debug messages (except err
ors)
-s, --server-side
emit server-side bindings for web service
-S, --skeletonDeploy <argument>
deploy skeleton (true) or implementation (false) in deploy.w
sdd. Default is false. Assumes --server-side.
-N, --NStoPkg <argument>=<value>
mapping of namespace to package
-f, --fileNStoPkg <argument>
file of NStoPkg mappings (default NStoPkg.properties)
-p, --package <argument>
override all namespace to package mappings, use this package
name instead
-o, --output <argument>
output directory for emitted files
-d, --deployScope <argument>
add scope to deploy.wsdd: "Application", "Request", "Session
"
-t, --testCase
emit junit testcase class for web service
-a, --all
generate code for all elements, even unreferenced ones
-T, --typeMappingVersion <argument>
indicate 1.1 or 1.2. The default is 1.1 (SOAP 1.1 JAX-RPC c
ompliant. 1.2 indicates SOAP 1.1 encoded.)
-F, --factory <argument>
name of a custom class that implements GeneratorFactory inte
rface (for extending Java generation functions)
-H, --helperGen
emits separate Helper classes for meta data
-B, --buildFile
emit Ant Buildfile for web service
-U, --user <argument>
username to access the WSDL-URI
-P, --password <argument>
password to access the WSDL-URI
-X, --classpath
additional classpath elements
-i, --nsInclude <argument>
include namespace in generated code
-x, --nsExclude <argument>
exclude namespace from generated code
-c, --implementationClassName <argument>
custom name of web service implementation
-u, --allowInvalidURL
emit file even if WSDL endpoint URL is not a valid URL

org.apache.axis2.AxisFault: First Element must contain the local name, Envelope , but found html
解决办法:stub._getServiceClient().getOptions().
setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,
Boolean.FALSE);

Chunk选项阻碍axis2集成.NET服务
昨天用.NET创建了一项WEB服务,实现一个应用集成接口。使用C#和VB.NET客户端均可以正常实现调用。为了实现JAVA客户端的集成,下载了axis2。在生成客户端stub以后,使用一个简单的测试代码,可无论如何均不能实现服务调用,郁闷。
回想起以前使用axis的时候是可以正常调用的,同事们也都用过,重新下载axis,在生成wsil并根据wsil生成客户端代理以后,JAVA客户端可以正常调用那项服务了。
使用协议分析工具,发现在axis中使用的是HTTP/1.0协议,而.NET和axis2使用的是HTTP/1.1协议,后两者的区别在于.NET未使用ns1的命名空间前缀打包SOAP请求,且axis2使用了Content-Encoding: chunked头。
通过修改wsdl2java生成的stub程序,取消ns1的命名空间前缀,故障依然存在。查了HTTP/1.1相关说明,并查找axis2相关javadoc,修改了stub类带(ConfigurationContext configurationContext, String targetEndpoint, boolean useSeparateListener)参数的构造方法,在最后加入一句禁止使用chunk选项,终于调用成功:_serviceClient.getOptions().setProperty(HTTPConstants.CHUNKED, Boolean.FALSE);


org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement return
The response message uses an undeclared namespace prefix "ax21" rather than the "ns" prefix used in the rest of the message.


axis2客户端需要使用的最少jar包2008-06-10 10:40axis2客户端jar包太多,全部加载会影响效率,偶尔也会存在冲突问题。网上有人说 axis2客户端需要使用的最少jar包 如下:

总结客户端必须加载:
activation-1.1.jar
axiom-api-1.2.4.jar
axiom-impl-1.2.4.jar
axis2-adb-1.2.jar
axis2-adb-codegen-1.2.jar
axis2-codegen-1.2.jar
axis2-java2wsdl-1.2.jar
axis2-kernel-1.2.jar
commons-codec-1.3.jar
commons-httpclient-3.0.1.jar
commons-logging-1.1.jar
stax-api-1.0.1.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.1.jar
XmlSchema-1.3.1.jar

自己使用adb方式调用下,实际需要最少jar包 如下:

activation-1.1.jar
axiom-api-1.2.2.jar
axiom-impl-1.2.2.jar
axis2-adb-1.1.1.jar
axis2-kernel-1.1.1.jar
commons-codec-1.3.jar
commons-httpclient-3.0.1.jar
commons-logging-1.1.jar
stax-api-1.0.1.jar
wsdl4j-1.6.2.jar
wstx-asl-3.2.1.jar
XmlSchema-1.3.1.jar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值