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

时间:2012-05-01 05:32:13

标签: java eclipse web-services wsdl weblogic11g

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

  

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

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

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

这次错误没有显示出来并且工作正常。

我正在使用的工具

  • Eclipse - 3.7.1
  • Oracle Enterprise Pack for Eclipse 11.1.1.8.0
  • 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. this WSDL导入您的WEB-INF / wsdl目录。
  4. 右键单击WSDL文件名,然后单击“WebLogic Web服务”→“生成Web服务”
  5. 请注意生成的dss_DSSPortImpl类文件中的错误。
  6. 使用this WSDL重复上述步骤,生成的类文件可以正常工作。

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


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

1 个答案:

答案 0 :(得分:1)

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

如果仔细查看问题wsdl,您会在SignResponse中看到两个元素:'signature'和'status'。因为响应消息中有多个元素,所以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是我们的部署环境),您将获得成功。