我正在寻找一些java开源api通过传递wsdl_URL和操作名作为参数来生成soap请求xml文件。实际上soapUI正在做这件事,我试图通过soapUI源代码,但我不能理解整个代码来完成我的任务。有没有什么java api可以做到这一点(apache或其他什么)?我在网上花了几天时间,没有看到任何结果。如果有人有任何想法请帮助我。先谢谢你。
6jjcrrmo1#
您可以使用开源的Membrane SOA库([ http://www.membrane-soa.org/soa-model-doc/1.4/java-api/create-soap-request-template.htm ])为WSDL中定义的每个操作生成XML:
public void createTemplates(String url){ WSDLParser parser = new WSDLParser(); Definitions wsdl = parser.parse(url); StringWriter writer = new StringWriter(); SOARequestCreator creator = new SOARequestCreator(); creator.setBuilder(new MarkupBuilder(writer)); creator.setDefinitions(wsdl); for (Service service : wsdl.getServices()) { for (Port port : service.getPorts()) { Binding binding = port.getBinding(); PortType portType = binding.getPortType(); for (Operation op : portType.getOperations()) { creator.setCreator(new RequestTemplateCreator()); creator.createRequest(port.getName(), op.getName(), binding.getName()); System.out.println(writer); writer.getBuffer().setLength(0); } } }
qxsslcnc2#
Soap UI还提供了Java Api,用于从WSDL创建请求和响应xml。
public static void main(String[] args) throws Exception { WsdlProject project = new WsdlProject(); WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, "http://localhost:8080/Service?wsdl"); WsdlInterface wsdl = wsdls[0]; for (Operation operation : wsdl.getOperationList()) { WsdlOperation wsdlOperation = (WsdlOperation) operation; System.out.println("Request:\n"+wsdlOperation.createRequest(true)); System.out.println("\nResponse:\n"+wsdlOperation.createResponse(true)); } }
Soap UI的Developer's corner有很好的指针用于与soap UI Api集成。
krcsximq3#
了解AXIShttp://axis.apache.org/axis2/java/core/
ryevplcw4#
如果您有SOAPHandler请求,您可以如下打印xml:
SOAPHandler
public static String getRawXml(SOAPMessageContext context) { try { ByteArrayOutputStream byteOS = new ByteArrayOutputStream(); context.getMessage().writeTo(byteOS); return byteOS.toString("UTF-8"); } catch (SOAPException | IOException e) { throw new RuntimeException(e); } }
并在handleMessage和handleFault中调用此方法。另一方面,如果您不使用apache或其他库来调用soap服务,则可以手动查看jdk中MessageWrapper类构造函数,并在packet变量上添加断点,然后在调试模式中查看p.toString():)
handleMessage
handleFault
MessageWrapper
packet
p.toString()
MessageWrapper(Packet p, Message m) { super(m.getSOAPVersion()); this.packet = p; this.delegate = m; this.streamDelegate = m instanceof StreamMessage ? (StreamMessage)m : null; this.setMessageMedadata(p); }
4条答案
按热度按时间6jjcrrmo1#
您可以使用开源的Membrane SOA库([ http://www.membrane-soa.org/soa-model-doc/1.4/java-api/create-soap-request-template.htm ])为WSDL中定义的每个操作生成XML:
qxsslcnc2#
Soap UI还提供了Java Api,用于从WSDL创建请求和响应xml。
Soap UI的Developer's corner有很好的指针用于与soap UI Api集成。
krcsximq3#
了解AXIS
http://axis.apache.org/axis2/java/core/
ryevplcw4#
如果您有
SOAPHandler
请求,您可以如下打印xml:并在
handleMessage
和handleFault
中调用此方法。另一方面,如果您不使用apache或其他库来调用soap服务,则可以手动查看jdk中
MessageWrapper
类构造函数,并在packet
变量上添加断点,然后在调试模式中查看p.toString()
:)