使用wsdl2java创建web服务客户端并使用它之后,我得到了意外的附件类型=class
我在Tomcat 7.0.54的localhost上部署了一个web服务,其中包含以下wsdl文件:使用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
<?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服务方面
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)