Tag: wsdl

如何使用Java-WS缓存WSDL

我创建了一个使用java WS与SOAP服务交互的应用程序。 我使用内置的netbeans函数生成类并管理WSDL。 每次运行应用程序时,都必须下载WSDL并再次解析它。 WSDL在每个版本都被冻结,因此我认为这不是必需的。 我试图将它作为本地文件引用,但随后我的应用程序抱怨它在另一台机器上安装时无法找到该文件。 有谁知道我如何阻止Java WS需要重新解析WSDL,或者至少在本地缓存它?

从WSDL生成代码会导致exception

我正在使用Axis2 1.5.1(wsdl2java)从给定的WSDL文件生成代码(客户端存根)。 Web服务由外部应用程序提供。 … RemoteApplication0.xsd的内容如下: 命令行: wsdl2java -ss -g -d adb -or -p com.sampleapp.ws.generated.client -uri SampleRemoteProcess.wsdl 生成过程会导致exception。 堆栈跟踪: Using AXIS2_HOME: C:\develop\axis2-1.5.1-bin\axis2-1.5.1\ Using JAVA_HOME: C:\Program Files\Java\jdk1.6.0_21 Retrieving document at ‘C:\temp\SampleRemoteProcess.wsdl’. Retrieving schema at ‘SampleApp.App.ApplicationManager.RemoteApplication0.xsd’, relative to ‘file:/C:/temp/SampleRemoteProcess.wsdl’. Retrieving schema at ‘SampleApp.App.ApplicationManager.RemoteApplication1.xsd’, relative to ‘file:/C:/temp/SampleRemoteProcess.wsdl’. Retrieving schema at ‘SampleApp.App.ApplicationManager.RemoteApplication2.xsd’, relative to ‘file:/C:/temp/SampleRemoteProcess.wsdl’. Retrieving schema at ‘SampleApp.App.ApplicationManager.RemoteApplication3.xsd’, relative […]

使用HTTPS的Web服务

我有一个外部Web服务,它可以通过https工作,我可以使用wsimport生成java类但是当我调用服务时我会收到以下exception: Exception in thread “main” com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.UnknownHostException: ECM01 at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(Unknown Source) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(Unknown Source) at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(Unknown Source)… Caused by: java.net.UnknownHostException: ECM01 at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) 我调用服务的类是这样的: public static void main(String[] args) { ColleagueServiceService cs = new ColleagueServiceService(); ColleagueService service = cs.getColleagueServicePort(); […]

使用CXF和wsdl2java生成代码时解决冲突

我在使用wsdl2java通过与Maven的cxf-codegen-plugin的一堆WSDL文件生成代码时遇到了一些冲突。 WSDL声明了同一系统的不同API,并且生成的代码有一些重叠(特别是对于模型类)。 外部系统和WSDL来自第三方,因此不受我们控制。 我遇到的第一个问题是由一个WSDL引起的一个结果ObjectFactory类中的命名冲突。 它定义了一个名为Foo的complexType,它包含一个名为Status的元素,它还定义了一个名为FooStatus的元素。 生成代码时,JAXB会抛出一个拟合,因为ObjectFactory将有两个名为createFooStatus(…)工厂方法,并且在运行时期间最终会出现exception。 我试过向-autoNameResolution提供选项-autoNameResolution但没有用。 我看过“两个声明导致ObjectFactory类中的冲突”和“将外部JAXB绑定文件应用于从WSDL导入的模式元素” ,并基于那些我编写的外部绑定文件重命名其中一个工厂方法。 我在绑定文件中使用SCD而不是XPath,如后一个链接所示,因为我和XPath的问题与作者有同样的问题。 这是有效的,但前提是我单独处理WSDL文件并仅将绑定文件应用于导致冲突的WSDL。 Maven配置如下所示: org.apache.cxf cxf-codegen-plugin 3.0.0-milestone1 generate-proxies generate-sources ${basedir}/First.wsdl ${basedir}/bindings.xml ${basedir}/Second.wsdl ${basedir}/Third.wsdl … More wsdlOption declarations … wsdl2java 现在,如果我这样做,我最终会遇到另一个问题,因为来自不同WSDL文件的生成代码使用相同的包结构。 这在实践中意味着在处理后续WSDL文件时会覆盖ObjectFactory类,这意味着在插件执行之后只存在从最后一个WSDL生成的那个。 我知道我可以更改目标包结构,但是从不同的WSDL生成的代码有很多重叠,复制它会感觉很傻。 我也尝试使用-keep wsdl2java选项,但这似乎没有做任何事情(或者至少ObjectFactory类仍然被覆盖)。 我的理解是,对此的解决方案是使用像这样的Maven配置一次性处理所有WSDL(仅显示配置部分,其他所有部分保持不变): ${basedir}/bindings.xml ${basedir} *.wsdl 但是,这会导致com.sun.istack.SAXParseException2 ,说我的SCD表达式与任何架构组件都不匹配(因为架构组件仅存在于其中一个WSDL中)。 如果我修改WSDL文件本身并使用后面的Maven配置而没有绑定文件,我可以得到我想要的结果。 通过这样做,生成的ObjectFactory是在使用第一个Maven配置单独处理WSDL时创建的合并。 但是,我宁愿不这样做,而是想用外部绑定文件来管理它。 我该如何解决这个问题? 我是否可以编写/应用绑定文件,以便在找不到匹配的模式组件时不会引发exception? 或者我可以单独处理WSDL而不是覆盖ObjectFactory类吗? 或者,我是否只需要将其从不同的WSDL生成到不同的包或者自己编辑WSDL文件? 万一它很重要,我当前的绑定文件看起来像这样(WSDL位于我的项目内与绑定文件在同一目录中):

WSDL中的参数名称具有重要名称

我正在使用JAXWS RI在Java中创建WebService。 自动部署应用程序WAR时会创建WSDL文件。 问题是我希望WSDL文件中的参数(每个操作都收到)具有重要的名称,但它们显示为arg0,arg1,arg2 …有没有办法定义这些参数的名称而不是使用默认名称? 我已经实现了以下内容: WebService接口 @WebService @SOAPBinding(style = Style.RPC) public interface WS2 { @WebMethod String confirmaXML(String lrt_id); } WebService接口实现 @WebService(endpointInterface = “vital.tde.ws2.WS2”) public class WS2Imp implements WS2{ public String confirmaXML(String lrt_id) { String respuesta = null; //CODE return respuesta; } 太阳jaxws.xml web.xml中 WS2 com.sun.xml.ws.transport.http.servlet.WSServletContextListener WS2 com.sun.xml.ws.transport.http.servlet.WSServlet 1 WS2 /WS2 120

如何将pfx文件转换为jks然后使用它来通过使用wsdl生成的类来签署传出的soap请求

我正在寻找一个代码示例,该示例演示如何使用PFX证书通过SSL访问安全Web服务。 我有证书和密码,我开始使用下面提到的命令创建一个KeyStore实例。 keytool -importkeystore -destkeystore “C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\dvs.keystore” -srckeystore “C:\Program Files\Java\jdk1.8.0_131\jre\lib\security\key.pfx” -srcstoretype pkcs12 -deststoretype JKS -srcstorepass ******* 然后我使用wsimport -keep -verbose -extension https://sandpit.dvshub.com.au:19443/Bus/VerificationServiceBus.svc?wsdl命令生成Java文件。 之后我创建了一个主类,在其中我指定了几个参数,例如这些证书的位置。 System.setProperty(“javax.net.ssl.trustStore”, trustStoreFile); System.setProperty(“javax.net.ssl.trustStorePassword”, trustStorePassword); System.setProperty(“javax.net.ssl.keyStore”, certificateFile); System.setProperty(“javax.net.ssl.keyStorePassword”, certificatePassword); System.setProperty(“sun.security.ssl.allowUnsafeRenegotiation”, “true”); System.setProperty(“javax.net.ssl.keyStore”, “C:\\Users\\Administrator\\Desktop\\dvs\\key.pfx”); System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS12”); System.setProperty(“javax.net.ssl.keyStorePassword”, certificatePassword); 然后我最终调用了wsimport使用它生成的服务创建的web方法。 CreatedService service = ServiceFactory/Port/Creator.getCreatedService(); // Where ‘CreatedService’ and ‘ServiceFactory/Port/Creator’ were created by wsimport: this code entirely […]

通过客户端存根访问WSDL时Java InaccessibleWSDLException

我正在尝试为Exchange Web服务编写自定义Java客户端。 我已经使用wsimport工具生成了客户端存根,如EWS的Services.wsdl文件中所述。 现在我编写了使用这些存根的代码。 我得到以下exception: Exception in thread “main” com.sun.xml.internal.ws.wsdl.parser.InaccessibleWSDLException: 2 counts of InaccessibleWSDLException. java.io.IOException: Got Server returned HTTP response code: 401 for URL: https://host.domain.com/ews/Services.wsdl while opening stream from https://host.domain.com/ews/Services.wsdl java.io.IOException: Got Server returned HTTP response code: 401 for URL: https://host.domain.com/ews/Services.wsdl?wsdl while opening stream from https://host.domain.com/ews/Services.wsdl?wsdl at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source) […]

解析WSDL的简单方法

我试图解析WSDL以获取操作,端点和示例有效负载。 用户输入的WSDL。 我找不到这样做的教程。 我只能找到生成我不需要的源代码的那些。 我尝试过使用XBeans,但显然我需要Saxon。 没有Saxon,有一种简单的轻量级方法吗? 例如 My first service 应该获得操作:GetLastTradePrice,GetLastTradePrice 端点:StockQuotePort 样本有效负载: 这就像SoapUI所做的那样。 但我主要关心的是能够解析WSDL。 更多上下文是上传WSDL,然后结果显示在GWT应用程序中(文件上载必须转到servlet)。 所以我需要解析文件并创建一个GWT能够理解的对象。

使用JAX-WS更改运行时生成的WSDL中的schemaLocation和soap:address位置

是否可以在JAX-WS WSDL中配置位置( schemaLocation和soap:address location )? 当我部署下面的示例时,’servername’将是localhost,’serverport’将是Web应用程序的本地端口号。 但是,我想将这些重新配置为代理服务器名称和重定向到服务的服务器端口。 这是可能的,我将如何实现它? 部署环境是Tomcat和Apache。 我有以下服务类: @WebService public class AuthenticationService { …. public AuthenticationService(){} @WebMethod public AuthenticationResult checkAuthentication( @WebParam(name = “authentication”) Authentication authentication, @WebParam(name = “privilege”) Privilege privilege) { …. } } 运行时,WSDL看起来像这样: 任何帮助将不胜感激。

编写jax-ws Web服务并在没有XSD的情况下生成WSDL

我在java上为tomcat应用服务器编写了一个简单的JAX-WS Web服务。 我有一个接口和实现类: 接口 @WebService(name = “myWs”) @SOAPBinding(style = Style.RPC) public interface IMyWs { @WebMethod(operationName = “getUser”) Response getUser(@WebParam(name = “phone”, mode = Mode.IN) String phone); } 履行 @WebService(endpointInterface = “ge.mari.IMyWs”) public class MyWs implements IMyWs { @Override public Response getUser(String phone) { // SOME CODE return response; } } 我的问题是,在我的wsdl文件中,响应类是在xsd文件中定义的。 这是我的wsdl文件的片段 如何使Web服务生成WSDL文件中的所有类型而不是单独的XSD文件? 我应该更改任何配置或添加一些注释到我的Web服务?