Java 从WSDL自动生成的WebLogic Web服务导致错误

Java 从WSDL自动生成的WebLogic Web服务导致错误,java,eclipse,web-services,wsdl,weblogic11g,Java,Eclipse,Web Services,Wsdl,Weblogic11g,我正在使用Eclipse从预先存在的WSDL自动创建WebLogicWeb服务(而不是客户端)。它接收3个请求参数(字符串、字符串、字节[]),并用1个参数(字节[])进行响应。但是,自动生成的类包含产生以下错误的代码: 端点接口方法“publicbyte[]符号(java.lang.String,java.lang.String,byte[])必须在Web服务中实现 但代码中显然存在符号方法 因此,我尝试创建一个非常简单的WSDL来测试web服务的自动生成。这次WSDL定义了2个请求参数(in

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

端点接口方法“publicbyte[]符号(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
重现错误的步骤:

  • 发射月食
  • 文件→ 新的→ Web服务项目
  • 导入到WEB-INF/wsdl目录
  • 右键单击WSDL文件名,然后单击WebLogic Web服务→ 生成Web服务
  • 请注意生成的dss_DSSPortImpl类文件中的错误
  • 对生成的类文件重复上述步骤,生成的类文件工作正常

    非常感谢您的帮助。谢谢



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

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

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

    公共无效标志(
    @WebParam(name=“userId”,targetNamespace=”“)
    字符串userId,
    @WebParam(name=“fileType”,targetNamespace=”“)
    字符串文件类型,
    @WebParam(name=“fileContent”,targetNamespace=”“)
    字节[]文件内容,
    @WebParam(name=“signature”,targetNamespace=“”,mode=WebParam.mode.OUT)
    持有人签名,
    @WebParam(name=“status”,targetNamespace=“”,mode=WebParam.mode.OUT)
    持有人身份);
    
    我怀疑如果您通过wsimport针对第一个wsdl生成存根(我知道以这种方式生成的存根可以很好地部署到WLS,因为这是我的典型方法,而WebLogic是我们的部署环境),您将获得成功

    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);