使用wsdl2java创建web服务客户端并使用它之后,我得到了意外的附件类型=class

使用wsdl2java创建web服务客户端并使用它之后,我得到了意外的附件类型=class,java,web-services,tomcat,soap,wsdl,Java,Web Services,Tomcat,Soap,Wsdl,我在Tomcat 7.0.54的localhost上部署了一个web服务,其中包含以下wsdl文件: <?xml version="1.0" encoding="UTF-8"?> <definitions name="SRW" targetNamespace="http://www.loc.gov/zing/srw/srwabosi/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xml

我在Tomcat 7.0.54的localhost上部署了一个web服务,其中包含以下wsdl文件:

<?xml version="1.0" encoding="UTF-8"?>
<definitions name="SRW" targetNamespace="http://www.loc.gov/zing/srw/srwabosi/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:srw-bindings="http://www.loc.gov/zing/srw/srw-bindings/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/">
  <import namespace="http://www.loc.gov/zing/srw/srw-bindings/" location="srw-bindings.wsdl">
    </import>
  <service name="SRWABOSI">
    <port name="SRW" binding="srw-bindings:SRW-SoapBinding">
      <soap:address location="http://localhost:8080/abosi/services/SRW"/>
    </port>
  </service>
</definitions>
在tomcat上部署我的应用程序后,我使用
wsdl2java
通过以下命令生成客户端:

wsdl2java -d wsdl2java_test1 -V -client -impl http://localhost:8080/abosi/services/SRW\?wsdl
然后我的界面代码如下所示(重要的部分是
下载操作

@WebService(targetNamespace=”http://www.loc.gov/zing/srw/interfaces/“,name=“SRWPort”)
@XMLSEEAL({gov.loc.zing.srw.ObjectFactory.class,gov.loc.zing.cql.xql.ObjectFactory.class,gov.loc.zing.srw.diagnostic.ObjectFactory.class,org.w3.\u 2000.\u 09.xmldsig.ObjectFactory.class})
@SOAPBinding(style=SOAPBinding.style.RPC)
公共接口SRWPort{
@WebResult(name=“body”,targetNamespace=”http://www.loc.gov/zing/srw/interfaces/,partName=“body”)
// ... 
@WebMethod(operationName=“DownloadOperation”)
公开作废下载操作(
@WebParam(partName=“recordId”,name=“recordId”)
java.lang.String记录ID,
@WebParam(partName=“library”,name=“library”)
java.lang.String库,
@WebParam(partName=“publicKey”,name=“publicKey”)
org.w3._2000._09.xmldsig.KeyInfoType公钥,
@WebParam(partName=“fileName”,mode=WebParam.mode.OUT,name=“fileName”)
javax.xml.ws.Holder文件名,
@WebParam(partName=“file”,mode=WebParam.mode.OUT,name=“file”)
javax.xml.ws.Holder文件,
@WebParam(partName=“sessionKey”,mode=WebParam.mode.OUT,name=“sessionKey”)
javax.xml.ws.Holder sessionKey
);
}
我尝试使用以下代码启动客户端:

package gov.loc.zing.srw.interfaces;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import gov.loc.zing.srw.srwabosi.SRWABOSI;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;

public final class SRWPort_SRW_Client {

    private static final QName SERVICE_NAME = new QName("http://www.loc.gov/zing/srw/srwabosi/", "SRWABOSI");

    private SRWPort_SRW_Client() {}

    public static void main(String args[]) throws java.lang.Exception {
        URL wsdlURL = SRWABOSI.WSDL_LOCATION;
        if (args.length > 0 && args[0] != null && !"".equals(args[0])) { 
            File wsdlFile = new File(args[0]);
            try {
                if (wsdlFile.exists()) {
                    wsdlURL = wsdlFile.toURI().toURL();
                } else {
                    wsdlURL = new URL(args[0]);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }

        SRWABOSI ss = new SRWABOSI(wsdlURL, SERVICE_NAME);

        SRWPort port = ss.getSRW();  

        {
        System.out.println("Invoking downloadOperation...");
        java.lang.String _downloadOperation_recordId = "";
        java.lang.String _downloadOperation_library = "";
        org.w3._2000._09.xmldsig.KeyInfoType _downloadOperation_publicKey = null;
        javax.xml.ws.Holder<java.lang.String> _downloadOperation_fileName = new javax.xml.ws.Holder<java.lang.String>();
        javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedDataType> _downloadOperation_file = new javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedDataType>();
        javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedKeyType> _downloadOperation_sessionKey = new javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedKeyType>();
        port.downloadOperation(_downloadOperation_recordId, _downloadOperation_library, _downloadOperation_publicKey, _downloadOperation_fileName, _downloadOperation_file, _downloadOperation_sessionKey);

        System.out.println("downloadOperation._downloadOperation_fileName=" + _downloadOperation_fileName.value);
        System.out.println("downloadOperation._downloadOperation_file=" + _downloadOperation_file.value);
        System.out.println("downloadOperation._downloadOperation_sessionKey=" + _downloadOperation_sessionKey.value);

        }

        System.exit(0);
    }

}
包gov.loc.zing.srw.interfaces;
导入java.io.File;
导入java.net.MalformedURLException;
导入java.net.URL;
导入javax.xml.namespace.QName;
import gov.loc.zing.srw.srwabosi.srwabosi;
导入javax.jws.WebMethod;
导入javax.jws.WebParam;
导入javax.jws.WebResult;
导入javax.jws.WebService;
导入javax.jws.soap.SOAPBinding;
导入javax.xml.bind.annotation.xmlsee;
公共最终类SRWPort\u SRW\u客户端{
私有静态最终QName服务_NAME=新QName(“http://www.loc.gov/zing/srw/srwabosi/“,“斯瓦博西”);
私有SRWPort_SRW_Client(){}
公共静态void main(字符串args[])抛出java.lang.Exception{
URL wsdlURL=SRWABOSI.WSDL_位置;
如果(args.length>0&&args[0]!=null&&!“.equals(args[0]){
File wsdlFile=新文件(args[0]);
试一试{
if(wsdlFile.exists()){
wsdlURL=wsdlFile.toURI().tour();
}否则{
wsdlURL=新URL(args[0]);
}
}捕获(格式错误){
e、 printStackTrace();
}
}
SRWABOSI ss=新的SRWABOSI(wsdlURL,服务名称);
SRWPort port=ss.getSRW();
{
System.out.println(“调用下载操作…”);
java.lang.String _downloadOperation_recordId=“”;
java.lang.String _downloadOperation_library=“”;
org.w3._2000._09.xmldsig.KeyInfoType _downloadOperation_publicKey=null;
javax.xml.ws.Holder _downloadOperation_fileName=new javax.xml.ws.Holder();
javax.xml.ws.Holder _downloadOperation_file=new javax.xml.ws.Holder();
javax.xml.ws.Holder _downloadOperation_sessionKey=newjavax.xml.ws.Holder();
port.downloadOperation(\u downloadOperation\u recordId、\u downloadOperation\u library、\u downloadOperation\u publicKey、\u downloadOperation\u fileName、\u downloadOperation\u file、\u downloadOperation\u sessionKey);
System.out.println(“downloadOperation.\u downloadOperation\u fileName=“+\u downloadOperation\u fileName.value”);
System.out.println(“downloadOperation.\u downloadOperation\u file=“+\u downloadOperation\u file.value”);
System.out.println(“downloadOperation.\u downloadOperation\u sessionKey=“+\u downloadOperation\u sessionKey.value”);
}
系统出口(0);
}
}
但我得到了这个错误:

Exception in thread "main" java.lang.UnsupportedOperationException: Unexpected Attachment type =class org.w3._2001._04.xmlenc.EncryptedDataType
    at com.sun.xml.internal.ws.client.sei.ResponseBuilder$AttachmentBuilder.createAttachmentBuilder(ResponseBuilder.java:237)
    at com.sun.xml.internal.ws.client.sei.SEIMethodHandler.buildResponseBuilder(SEIMethodHandler.java:173)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.<init>(SyncMethodHandler.java:74)
    at com.sun.xml.internal.ws.client.sei.SEIStub.initMethodHandlers(SEIStub.java:88)
    at com.sun.xml.internal.ws.client.sei.SEIStub.<init>(SEIStub.java:78)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:590)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:330)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:312)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:294)
    at javax.xml.ws.Service.getPort(Service.java:119)
    at gov.loc.zing.srw.srwabosi.SRWABOSI.getSRW(SRWABOSI.java:79)
    at gov.loc.zing.srw.interfaces.SRWPort_SRW_Client.main(SRWPort_SRW_Client.java:51)
线程“main”java.lang.UnsupportedOperationException中的异常:意外的附件类型=类org.w3.\u 2001.\u 04.xmlenc.EncryptedDataType 位于com.sun.xml.internal.ws.client.sei.ResponseBuilder$AttachmentBuilder.createAttachmentBuilder(ResponseBuilder.java:237) 位于com.sun.xml.internal.ws.client.sei.SEIMethodHandler.buildResponseBuilder(SEIMethodHandler.java:173) 位于com.sun.xml.internal.ws.client.sei.SyncMethodHandler.(SyncMethodHandler.java:74) 位于com.sun.xml.internal.ws.client.sei.SEIStub.initMethodHandlers(SEIStub.java:88) 位于com.sun.xml.internal.ws.client.sei.SEIStub.(SEIStub.java:78) 在com.sun.xml.internal.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:590)上 在com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:330)上 位于com.sun.xml.internal.ws.client.wsservicedegate.getPort(wsservicedegate.java:312) 在com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:294) 位于javax.xml.ws.Service.getPort(Service.java:119) www.gov.loc.zing.srw.srwabosi.srwabosi.getSRW(srwabosi.java:79) 位于gov.loc.zing.srw.interfaces.SRWPort_srw_Client.main(SRWPort_srw_Client.java:51) 问题在于(我想是因为在那之后我能够成功地调用我的web服务)没有在没有

  • 动态Web模块方面(这应该作为第一个添加,否则我会出错)
  • CXF 2.x Web服务方面
在eclipse中应用这些更改之后,我能够成功地调用我的服务的方法

package gov.loc.zing.srw.interfaces;

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.namespace.QName;
import gov.loc.zing.srw.srwabosi.SRWABOSI;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.bind.annotation.XmlSeeAlso;

public final class SRWPort_SRW_Client {

    private static final QName SERVICE_NAME = new QName("http://www.loc.gov/zing/srw/srwabosi/", "SRWABOSI");

    private SRWPort_SRW_Client() {}

    public static void main(String args[]) throws java.lang.Exception {
        URL wsdlURL = SRWABOSI.WSDL_LOCATION;
        if (args.length > 0 && args[0] != null && !"".equals(args[0])) { 
            File wsdlFile = new File(args[0]);
            try {
                if (wsdlFile.exists()) {
                    wsdlURL = wsdlFile.toURI().toURL();
                } else {
                    wsdlURL = new URL(args[0]);
                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }

        SRWABOSI ss = new SRWABOSI(wsdlURL, SERVICE_NAME);

        SRWPort port = ss.getSRW();  

        {
        System.out.println("Invoking downloadOperation...");
        java.lang.String _downloadOperation_recordId = "";
        java.lang.String _downloadOperation_library = "";
        org.w3._2000._09.xmldsig.KeyInfoType _downloadOperation_publicKey = null;
        javax.xml.ws.Holder<java.lang.String> _downloadOperation_fileName = new javax.xml.ws.Holder<java.lang.String>();
        javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedDataType> _downloadOperation_file = new javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedDataType>();
        javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedKeyType> _downloadOperation_sessionKey = new javax.xml.ws.Holder<org.w3._2001._04.xmlenc.EncryptedKeyType>();
        port.downloadOperation(_downloadOperation_recordId, _downloadOperation_library, _downloadOperation_publicKey, _downloadOperation_fileName, _downloadOperation_file, _downloadOperation_sessionKey);

        System.out.println("downloadOperation._downloadOperation_fileName=" + _downloadOperation_fileName.value);
        System.out.println("downloadOperation._downloadOperation_file=" + _downloadOperation_file.value);
        System.out.println("downloadOperation._downloadOperation_sessionKey=" + _downloadOperation_sessionKey.value);

        }

        System.exit(0);
    }

}
Exception in thread "main" java.lang.UnsupportedOperationException: Unexpected Attachment type =class org.w3._2001._04.xmlenc.EncryptedDataType
    at com.sun.xml.internal.ws.client.sei.ResponseBuilder$AttachmentBuilder.createAttachmentBuilder(ResponseBuilder.java:237)
    at com.sun.xml.internal.ws.client.sei.SEIMethodHandler.buildResponseBuilder(SEIMethodHandler.java:173)
    at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.<init>(SyncMethodHandler.java:74)
    at com.sun.xml.internal.ws.client.sei.SEIStub.initMethodHandlers(SEIStub.java:88)
    at com.sun.xml.internal.ws.client.sei.SEIStub.<init>(SEIStub.java:78)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.createEndpointIFBaseProxy(WSServiceDelegate.java:590)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:330)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:312)
    at com.sun.xml.internal.ws.client.WSServiceDelegate.getPort(WSServiceDelegate.java:294)
    at javax.xml.ws.Service.getPort(Service.java:119)
    at gov.loc.zing.srw.srwabosi.SRWABOSI.getSRW(SRWABOSI.java:79)
    at gov.loc.zing.srw.interfaces.SRWPort_SRW_Client.main(SRWPort_SRW_Client.java:51)