.net调用java生成的ws R2718的问题

原创 2013年12月04日 16:19:38

java工程,使用easywsdl生成发布的WebService的wsdl。并使用SDO的服务数据对象模型,对数据进行描述。

生成的wsdl使用vs2010的visual studio命令提示行,使用wsdl out命令生成C#相关的调用文件,发现后台会抛出如下信息:

警告: 此 Web 引用不符合 WS-I Basic Profile v1.1。
R2718: 说明中的 wsdl:binding 必须与所引用的 wsdl:portType 包含一组相同的 wsdl:operations。
  -  来自命名空间“http://www.com/esb/ComponentService1”的 portType“Com
ponentService1Interface”上的操作“operation1”没有匹配的绑定。
  -  在来自命名空间“http://www.com/esb/ComponentService1”的 portType“C
omponentService1Interface”上,没有与来自命名空间“http://www.com/esb/Com
ponentService1”的绑定“ComponentService1Soap11”上的操作“operation1”相匹配的
操作。
  -  在来自命名空间“http://www.com/esb/ComponentService1”的 portType“C
omponentService1Interface”上,没有与来自命名空间“http://www.com/esb/Com
ponentService1”的绑定“ComponentService1Soap11”上的操作“operation1”相匹配的
操作。

有关 WS-I Basic Profile v1.1 的更多详细信息,请参阅位于以下位置的规范:
http://www.ws-i.org/Profiles/BasicProfile-1.1.html。

错误: 无法从命名空间“http://www.com/esb/ComponentService1”导入绑定“Com
ponentService1Soap11”。
  - 来自命名空间“http://www.com/esb/ComponentService1”的 portType“Comp
onentService1Interface”上的操作“operation1”存在以下语法错误: 此操作没有匹配的
绑定。请检查 Binding 节中的操作、输入和输出的名称是否与 PortType 节中的相应名称
相匹配。

看起来是生成的WSDL不符合ws的某些规范(.Net对这些东西的验证真严格),但是,在java下从没碰到过此类问题。

研究相关规范及网络资源学习,发现问题根本原因在于wsdl文件中的以下“portType”片段的描述:

  <ns1:portType name="ComponentService1Interface">
    <ns1:operation name="operation1">
      <ns1:input message="ns8:operation1" name="operation1">
    </ns1:input>
      <ns1:output message="ns8:operation1Response" name="operation1Response">
    </ns1:output>
    </ns1:operation>
  </ns1:portType>
与后续的“binding”部分的描述:

  <ns1:binding name="ComponentService1Soap11" type="ns8:ComponentService1Interface">
    <ns3:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <ns1:operation name="operation1">
      <ns3:operation soapAction="http://www.com/esb/ComponentService1/operation1" style="document"/>
      <ns1:input>
        <ns3:body use="literal"/>
      </ns1:input>
      <ns1:output>
        <ns3:body use="literal"/>
      </ns1:output>
    </ns1:operation>
  </ns1:binding>
两者的“input”与“output”的相关内容,name属性不一致(所谓不一致,即前者有name属性值,后者没有)。
试过之后,发现有两种解决方案:

1、去掉前者的input与output的name属性值。

2、在后者的input与output中添加与前者相同的name属性值。

即调整后的片段为:

  <ns1:portType name="ComponentService1Interface">
    <ns1:operation name="operation1">
      <ns1:input message="ns8:operation1">
    </ns1:input>
      <ns1:output message="ns8:operation1Response">
    </ns1:output>
    </ns1:operation>
  </ns1:portType>
  <ns1:binding name="ComponentService1Soap11" type="ns8:ComponentService1Interface">
    <ns3:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <ns1:operation name="operation1">
      <ns3:operation soapAction="http://www.apusic.com/esb/ComponentService1/operation1" style="document"/>
      <ns1:input>
        <ns3:body use="literal"/>
      </ns1:input>
      <ns1:output>
        <ns3:body use="literal"/>
      </ns1:output>
    </ns1:operation>
  </ns1:binding>

  <ns1:portType name="ComponentService1Interface">
    <ns1:operation name="operation1">
      <ns1:input message="ns8:operation1" name="operation1">
    </ns1:input>
      <ns1:output message="ns8:operation1Response" name="operation1Response">
    </ns1:output>
    </ns1:operation>
  </ns1:portType>
  <ns1:binding name="ComponentService1Soap11" type="ns8:ComponentService1Interface">
    <ns3:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <ns1:operation name="operation1">
      <ns3:operation soapAction="http://www.apusic.com/esb/ComponentService1/operation1" style="document"/>
      <ns1:input name="operation1">
        <ns3:body use="literal"/>
      </ns1:input>
      <ns1:output name="operation1Response">
        <ns3:body use="literal"/>
      </ns1:output>
    </ns1:operation>
  </ns1:binding>
总之,就是需要两者的input与output的属性保持完全的一致。

相关文章推荐

C#调用JAVA的JAR包(感觉只能调用简单的JAR包)

一、将已经编译后的java中Class文件进行打包; Eclipse或myeclipse进行Export选择jar即可。或者使用命令 如:将某目录下的所有class文件夹全部进行打包处理;...

用IKVM在C#中调用JAVA程序

用IKVM在C#中调用JAVA程序,用IKVM在C#中调用JAVA库 IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序。本文将比较详细...

通过COM组件方式实现java调用C#写的DLL文件

通过JAVA调用C#的DLL文件实现。网上资料很多,自己整合总结了一下,做个备忘。  一、C#写com组件 开发环境 VS2013 1、新建工程:TestDemo     //根据自己需要取工程名...

jar打包成dll(C#调用java代码)

一、将已经编译后的java中Class文件进行打包;打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理; 使用的命令:jar cvf test.jar -C com/ . 其中...

C#调用java的jar文件,jar文件转dll

一、将已经编译后的java中Class文件进行打包; Eclipse或myeclipse进行Export选择jar即可。或者使用命令     如:将某目录下的所有class文件夹全部进行打包处理;...

C#调用Java方法(详细实例)

C#调用Java方法(详细实例) 阅读目录 C#调用c++C#调用JAVA方法 C#可以直接引用C++的DLL和转换JAVA写好的程序。最近由于工作原因接触这方面比较多,根据实际需求...
  • csnewdn
  • csnewdn
  • 2017年02月09日 08:20
  • 302

C#实现调用Java类中方法

基本思路: 用C#实现调用Java编写的类中的方法;重点是将Java编写的程序打包成Jar,然后使用开源工具(IKVM)将其转化成DLL控件,在.NET环境下调用。1.打开Eclipse编写Java...

C#调用java代码

一、将已经编译后的java中Class文件进行打包;打包命令JAR 1.   此处 java的所有类必须放在一个Package中,不要使用缺省的包,C#会找不到类之间的调用(C#貎似不能引用其它...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.net调用java生成的ws R2718的问题
举报原因:
原因补充:

(最多只允许输入30个字)