java – 在不调用Web服务的情况下获取soap消息
发布时间:2020-12-15 02:24:56 所属栏目:Java 来源:网络整理
导读:使用JAX-WS规范的Glassfish Metro实现,可以为特定操作生成SOAP请求消息,而无需实际调用操作.像SOAPUI这样的东西只能生成基于WSDL的样本SOAP消息,我想生成它,提供操作参数. 谢谢. 解决方法 好.我想我已经明白了.它不漂亮而且它不干净,因为它使用反射,基于Orac
使用JAX-WS规范的Glassfish Metro实现,可以为特定操作生成SOAP请求消息,而无需实际调用操作.像SOAPUI这样的东西只能生成基于WSDL的样本SOAP消息,我想生成它,提供操作参数.
谢谢. 解决方法
好.我想我已经明白了.它不漂亮而且它不干净,因为它使用反射,基于Oracle专有类并假设您已经生成了客户端WS部分,但是如果您需要这样的功能,就像我一样严重,截止日期即将到来不可避免死亡本身然后听我的故事:)
// location of wsdl file provided in URL format // ex. file://localhost/C:/wsdl.wsdl for local file String wsdlLocation = "wsdlLocation"; try{ // we're assuming that you've already generated WS client side GeneratedService service = new GeneratedService( new URL(wsdlLocation),new QName("namespaceURI","localPart")); GeneratedPort port = service.getGeneratedPort(); SEIStub stub = (SEIStub) Proxy.getInvocationHandler(port); Field methodHandlersField = stub.getClass().getDeclaredField("methodHandlers"); //hack to make private field accessible methodHandlersField.setAccessible(true); Method operationMethod = null; Object args = null; switch (somethingToTellYouWhatMethodToInvoke){ case someMethodValue: operationMethod = GeneratedPort.class.getMethod( "methodName",classes,of,your,attributes); args = new Object[]{attributes,method}; break; default: throw new SomeException("some message"); break; } MethodHandler handler = ((Map<Method,MethodHandler>) methodHandlersField. get(stub)).get(operationMethod); Method createMessageMethod = handler.getClass().getSuperclass(). getDeclaredMethod("createRequestMessage",Object[].class); //another hack createMessageMethod.setAccessible(true); Message message = (Message) createMessageMethod.invoke(handler,args); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT,"yes"); transformer.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount","2"); transformer.transform( message.readPayloadAsSource(),new StreamResult(System.out)); } catch (Exception e){ //lots of things to catch e.printStackTrace(); } 所以再一次这是一个非常糟糕的解决方案,但是直到一些沉重的思想家来到并为我的日子提供更好的东西或Sun移动课程我需要更友好的包装才能满足. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |