访问wsdl会出现如下问题
正确时String类型的参数描述应该为
   <wsdl:message name="approveResponse">
      <wsdl:part name="approveReturn" type="xsd:string">
      </wsdl:part>
   </wsdl:message>
其中type为xsd:string
 
错误时String类型的参数描述为
   <wsdl:message name="approveResponse">
      <wsdl:part name="approveReturn" type="soapenc:string">
      </wsdl:part>
   </wsdl:message>
其中type为soapenc:string
 
tomcat刚启动的时候没有问题,是正确的,对方调用几次以后(不确定次数),String类型参数描述就会由xsd:string变成soapenc:string,导致接口无法调用
我们自己使用webService测试工具无法重现此问题

解决方案 »

  1.   


    <?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">
     <globalConfiguration>
      <parameter name="sendMultiRefs" value="true"/>
      <parameter name="disablePrettyXML" value="true"/>
      <parameter name="adminPassword" value="admin"/>
      <parameter name="attachments.Directory" value="E:\apache-tomcat-6.0.14\webapps\axis\WEB-INF\attachments"/>
      <parameter name="dotNetSoapEncFix" value="false"/>
      <parameter name="enableNamespacePrefixOptimization" value="false"/>
      <parameter name="sendXMLDeclaration" value="true"/>
      <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/>
      <parameter name="sendXsiTypes" value="true"/>
      <requestFlow>
       <handler type="java:org.apache.axis.handlers.JWSHandler">
        <parameter name="scope" value="session"/>
       </handler>
       <handler type="java:org.apache.axis.handlers.JWSHandler">
        <parameter name="scope" value="request"/>
        <parameter name="extension" value=".jwr"/>
       </handler>
      </requestFlow>
     </globalConfiguration>
     <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
     <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
     <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
     <service name="MyWebServiceImpl" provider="java:RPC">
      <parameter name="allowedMethods" value="sayHello"/>
      <parameter name="scope" value="request"/>
      <parameter name="className" value="com.ultrapower.itsm.server.MyWebServiceImpl"/>
     </service>
     <service name="Change" provider="java:RPC">
      <parameter name="allowedMethods" value="*"/>
      <parameter name="scope" value="request"/>
      <parameter name="className" value="com.ultrapower.itsm.server.Change"/>
     </service>
     <service name="Incident" provider="java:RPC">
      <parameter name="allowedMethods" value="*"/>
      <parameter name="scope" value="request"/>
      <parameter name="className" value="com.ultrapower.itsm.server.Incident"/>
     </service>
     <service name="AdminService" provider="java:MSG">
      <parameter name="allowedMethods" value="AdminService"/>
      <parameter name="enableRemoteAdmin" value="false"/>
      <parameter name="className" value="org.apache.axis.utils.Admin"/>
      <namespace>http://xml.apache.org/axis/wsdd/</namespace>
     </service>
     <service name="Version" provider="java:RPC">
      <parameter name="allowedMethods" value="getVersion"/>
      <parameter name="className" value="org.apache.axis.Version"/>
     </service>
     <service name="ServiceRequest" provider="java:RPC">
      <parameter name="allowedMethods" value="*"/>
      <parameter name="scope" value="request"/>
      <parameter name="className" value="com.ultrapower.itsm.server.ServiceRequest"/>
     </service>
     <transport name="http">
      <requestFlow>
       <handler type="URLMapper"/>
      </requestFlow>
     </transport>
     <transport name="local">
      <responseFlow>
       <handler type="LocalResponder"/>
      </responseFlow>
     </transport>
    </deployment>
      

  2.   

    <parameter name="dotNetSoapEncFix" value="false"/>\
    楼上这个参数应该是
    <parameter name="dotNetSoapEncFix" value="true"/>
      

  3.   

    dotNetSoapEncFix引用一段文档
    dotNetSoapEncFix Set this flag to true to turn on a preference for the XML Schema (xsd) types in the Axis engine. This improved interop with .NET. In particular, .NET seems to have problems accepting SOAP encoded types (soapenc) in arrays. Due to bugs in the Axis 1.1 type mapping system, Axis generally perferred the schema types. Axis 1.2 now correctly uses the SOAP encoded types when it is using SOAP encoding for a service. See JAX-RPC 1.1, section 4.2.1. Note: You can also set this flag by setting the static property on the TypeMappingImpl class:
    TypeMappingImpl.dotnet_soapenc_bugfix = true;