繁体   English   中英

WSDL自动生成的WebLogic Web Service导致错误

[英]Auto generated WebLogic Web Service from WSDL causing errors

我正在使用Eclipse通过预先存在的WSDL自动创建WebLogic Web服务(而不是客户端)。 它接收3个请求参数(字符串,字符串,字节[]),并以1个参数(字节[])响应。 但是,自动生成的类包含的代码会产生以下错误:

端点接口方法“ public byte [] sign(java.lang.String,java.lang.String,byte [])”必须在Web Service中实现。

但是符号方法显然存在于代码中。

因此,我尝试创建一个非常简单的WSDL来测试Web服务的自动生成。 这次WSDL定义了2个请求参数(int,int)和1个响应(int)。

这次错误没有出现并且可以正常工作。

我正在使用的工具

  • Eclipse-3.7.1
  • 适用于Eclipse 11.1.1.8.0的Oracle Enterprise Pack
  • Oracle WebLogic Server 11gR1(10.3.6)
  • 由Oracle JAX-WS 2.1.5完成的类自动生成
  • Windows 7-32位,带有1.6 JDK / JRE

重现该错误的步骤:

  1. 启动Eclipse
  2. 文件→新建→Web服务项目
  3. 将此WSDL导入到WEB-INF / wsdl目录。
  4. 右键单击WSDL文件名,然后单击WebLogic Web服务→生成Web服务。
  5. 注意生成的dss_DSSPortImpl类文件中的错误。

使用此WSDL重复上述步骤,并且产生的类文件可以正常工作。

任何帮助都非常感谢。 谢谢!


(由于隐私原因,WSDL文件上的名称空间已从我的测试中更改。)

我的笔记本电脑上目前没有安装OEPE,因此无法重现您的确切步骤,但这可能很有用:

如果仔细查看问题wsdl,您将在SignResponse中看到两个元素:“签名”和“状态”。 由于响应消息中包含多个元素,因此wsimport会在每个输出参数中生成一个Holder参数,作为方法签名的一部分,以提供用于返回每个参数的存储桶。 当直接针对问题wsdl运行wsimport时,我在服务接口(Adapter.java)中获得以下(预期)签名:

public void sign(
    @WebParam(name = "userId", targetNamespace = "")
    String userId,
    @WebParam(name = "fileType", targetNamespace = "")
    String fileType,
    @WebParam(name = "fileContent", targetNamespace = "")
    byte[] fileContent,
    @WebParam(name = "signature", targetNamespace = "", mode = WebParam.Mode.OUT)
    Holder<byte[]> signature,
    @WebParam(name = "status", targetNamespace = "", mode = WebParam.Mode.OUT)
    Holder<String> status);

我怀疑如果您通过wsimport针对第一个wsdl生成存根(我确实知道这种生成方式可以很好地部署到WLS,因为这是我的典型方法,而WebLogic是我们的部署环境),您将成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM