如何以编程方式动态创建 WSDL 并解析请求,而无需在 Java 中生成代码或存根?
这是我想做的:
我有一个Java Web应用程序,我可以在其中定义执行代码的服务(例如JRuby),并且它还指定输入参数和输出参数。 所有这些信息都存储在数据库中。
今天,根据这些信息,我可以呈现一个网页,其中显示输入的表单字段。如果用户提交表单,我会解析输入请求参数并将它们传递给实际的 JRuby 代码,并将输出返回到响应页面。
我现在想做的是做完全相同的事情,但不向用户显示 HTML 网站,而是显示 WSDL。 假设这个 WSDL 的使用者在他的一端创建了一个 SOAP 客户端并调用我的 web 服务(包括所需的输入参数),我希望有一些 java 代码可以解析传入的 SOAP 请求,根据动态生成的 WSDL 文件对其进行验证,提取输入请求参数,将它们传递给 JRuby 代码,并将结果作为另一个 SOAP 请求返回。
长话短说:
哪个基于 Java 的框架可以帮助我解决这个问题? 我无法创建 java 类来生成 WSDL 或使用任何注释,因为输入和输出的规范是来自数据库的动态。
我想我可以真正手动生成 WSDL(连接字符串或一些例如 freemarker 模板),然后也手动解析 xml,但我想是否有更好的方法以编程方式执行此操作。
谢谢 克里斯托夫
Here is what I wanna do:
I have an Java web-app where i can define a service which executes code (e.g. JRuby), and it also specifies the input parameters and output parameters.
All this information is stored in a DB.
Today from that information I can render a webpage presenting form fields for the inputs. If the user submits the form I parse the input request parameters and pass them to the actual JRuby code and return the outputs back to a response page.
What I want to do now is to do the exact same thing but don't show the user a HTML website, but show a WSDL instead.
Assuming the consumer of this WSDL creates a SOAP client on his end and calls my webservice including the required input parameters, I would like to have some java code which can parse the incomming SOAP request, validate it against the dynamically generated WSDL file, extract the input request parameters, pass them to the JRuby code and return results as another SOAP request.
Long story short:
Which Java based framework can help me with that?
I can't create java classes to generate WSDL or use any annotations because the specification of the input and outputs is dynamic from the database.
I think I could generate the WSDL really manually (concatenating strings or some e.g. freemarker template) and then parse the xml also manually, but I thought if there is a better way to do this programmatically.
Thanks
Christoph
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以尝试查看 wsdl4j。我遇到了类似的问题,在寻找解决方案时偶然发现了 wsdl4j,我还没有完全测试它。 此处有一个 pdf 文档解释如何使用它(第 10 章“以编程方式创建定义”)希望它能有所帮助。
麦克斯
You could try giving a look at wsdl4j. I'm having a similar problem and I stumbled on wsdl4j while looking for a solution, I haven't fully tested it yet. there is a pdf document here explaining how use it (chapter 10 "Programmatically Creating Definitions") hope it can help.
Maxx