java调用delphi7的webservice报错
使用myeclipse+axis2,导入wsdl文件,生成客户端测试代码:如下所示:
java.lang.String url = "http://xxx.xxx.xxx.xxx:xxxx/hansncms/YXTService.exe/wsdl";//http://xxx.xxx.xxx.xxx:xxxx/hansncms/YXTService.exe/wsdl/IHansYXTService
org.tempuri.IHansYXTServiceserviceStub stub =
new org.tempuri.IHansYXTServiceserviceStub(url);//the default implementation should point to the right endpoint
org.tempuri.IHansYXTServiceserviceStub.ReceiveOverage request=
(org.tempuri.IHansYXTServiceserviceStub.ReceiveOverage)getTestObject(org.tempuri.IHansYXTServiceserviceStub.ReceiveOverage.class);
// todo Fill in the param10 here
request.setName("xxx");
request.setHospitalno("xxx");
request.setUsername("test");
request.setPassword("123");
assertNotNull(stub.receiveOverage(
request));
附wsdl:
<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IHansYXTServiceservice" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
<message name="receiveOverage0Request">
<part name="name" type="xs:string"/>
<part name="hospitalno" type="xs:string"/>
<part name="username" type="xs:string"/>
<part name="password" type="xs:string"/>
</message>
<message name="receiveOverage0Response">
<part name="return" type="xs:string"/>
</message>
<message name="receiveResult1Request">
<part name="SN" type="xs:string"/>
<part name="username" type="xs:string"/>
<part name="password" type="xs:string"/>
</message>
<message name="receiveResult1Response">
<part name="return" type="xs:string"/>
</message>
<portType name="IHansYXTService">
<operation name="receiveOverage">
<input message="tns:receiveOverage0Request"/>
<output message="tns:receiveOverage0Response"/>
</operation>
<operation name="receiveResult">
<input message="tns:receiveResult1Request"/>
<output message="tns:receiveResult1Response"/>
</operation>
</portType>
<binding name="IHansYXTServicebinding" type="tns:IHansYXTService">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="receiveOverage">
<soap:operation soapAction="urn:HansYXTServiceIntf-IHansYXTService#receiveOverage" style="rpc"/>
<input message="tns:receiveOverage0Request">
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:HansYXTServiceIntf-IHansYXTService"/>
</input>
<output message="tns:receiveOverage0Response">
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:HansYXTServiceIntf-IHansYXTService"/>
</output>
</operation>
<operation name="receiveResult">
<soap:operation soapAction="urn:HansYXTServiceIntf-IHansYXTService#receiveResult" style="rpc"/>
<input message="tns:receiveResult1Request">
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:HansYXTServiceIntf-IHansYXTService"/>
</input>
<output message="tns:receiveResult1Response">
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="urn:HansYXTServiceIntf-IHansYXTService"/>
</output>
</operation>
</binding>
<service name="IHansYXTServiceservice">
<port name="IHansYXTServicePort" binding="tns:IHansYXTServicebinding">
<soap:address location="http://xxx.xxx.xxx.xxx:xxxx/hansncms/YXTService.exe/soap/IHansYXTService"/>
</port>
</service>
</definitions>
运行测试代码后,报如下错误:
org.apache.axis2.AxisFault: First Element must contain the local name, Envelope , but found html
at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:90)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:353)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:416)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at org.tempuri.IHansYXTServiceserviceStub.receiveOverage(IHansYXTServiceserviceStub.java:262)
at org.tempuri.IHansYXTServiceserviceTest.testreceiveOverage(IHansYXTServiceserviceTest.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.apache.axiom.soap.SOAPProcessingException: First Element must contain the local name, Envelope , but found html
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.constructNode(StAXSOAPModelBuilder.java:251)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createOMElement(StAXSOAPModelBuilder.java:209)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.createNextOMElement(StAXSOAPModelBuilder.java:191)
at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:172)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.getSOAPEnvelope(StAXSOAPModelBuilder.java:156)
at org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder.<init>(StAXSOAPModelBuilder.java:105)
at org.apache.axis2.builder.BuilderUtil.getSOAPBuilder(BuilderUtil.java:677)
at org.apache.axis2.transport.TransportUtils.createDocumentElement(TransportUtils.java:182)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:112)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:88)
... 24 more
备注:
wsdl url地址,输入在浏览器,可以正常访问。
在网上查相关资料,说在测试代码中加入如下代码即可访问:
stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
可是加过后,错误仍存在。
请知道的朋友,发帖解决下,不胜感激。