非常感谢孙浩老师。
实现addUser(User user)和list()方法必须有handler信息验证。
服务端,验证Handler方法:
@Override public boolean handleMessage(SOAPMessageContext context) { Boolean flag = (Boolean) context .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (!flag) { try { SOAPMessage message = context.getMessage(); SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); SOAPHeader header = envelope.getHeader(); SOAPBody body = envelope.getBody(); Node bn = body.getChildNodes().item(0); String partname = bn.getLocalName(); if ("list".equals(partname) || "addUser".equals(partname)) { if (header == null) { // 添加一个错误信息 SOAPFault fault = body.addFault(); fault.setFaultString("头部信息不能为空!"); throw new SOAPFaultException(fault); } Iterator<SOAPHeaderElement> iterator = header .extractAllHeaderElements(); if (!iterator.hasNext()) { // 添加一个错误信息 SOAPFault fault = body.addFault(); fault.setFaultString("头部信息不正确!"); throw new SOAPFaultException(fault); } while (iterator.hasNext()) { SOAPHeaderElement ele = iterator.next(); System.out.println(ele.getTextContent()); } } } catch (SOAPException e) { e.printstacktrace(); } } return true; }
@Override public boolean handleMessage(SOAPMessageContext context) { Boolean flag = (Boolean) context .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); if (flag) { try { SOAPMessage message = context.getMessage(); SOAPEnvelope envelope = message.getSOAPPart().getEnvelope(); SOAPBody body = envelope.getBody(); Node node = body.getChildNodes().item(0); String pn = node.getLocalName(); if("list".equals(pn)||"addUser".equals(pn)) { SOAPHeader header = envelope.getHeader(); if(header==null) header = envelope.addHeader(); QName name = new QName("http://soap.lichen.cn/","licenseInfo"); header.addHeaderElement(name).setValue("client message ......."); message.writeto(System.out); } message.writeto(System.out); } catch (SOAPException | IOException e) { e.printstacktrace(); } } return true; }
测试方法:
public static void main(String[] args) { URL url = null; try { url = new URL("http://localhost:9988/ns?wsdl"); } catch (MalformedURLException e1) { e1.printstacktrace(); } QName name = new QName("http://soap.lichen.cn/","MyServiceImplService"); MyServiceImplService mis = new MyServiceImplService(url,name); IMyService ms = mis.getMyServiceImplPort(); try { // ms.login("admin","111"); User user = new User(); user.setId(2); user.setUsername("lisi"); user.setNickname("李四"); user.setPassword("123456"); Holder<User> holder = new Holder<User>(user); ms.addUser(holder); System.out.println("TestClient......"); } catch (SOAPFaultException e) { System.out.println(e.getMessage()); } }
结果:
handleMessage方法注释到handle信息时,客户端控制台:
handleMessage方法添加handle信息时,客户端控制台:
服务端控制台没有异常:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。