根据wsdl文件来生成java-ws调用client类:
wsimport -d bin -s src -p pakcageFolder http://ip/wsdlFiles/sendService.wsdl
用javax.xml.ws.Endpoint暴露一个wsdl:
使用 apt 编译
apt -d com EndPointServer.java
使用java com.EndPointServer运行,然后将浏览器指向http://ip/EndPointServer?wsdl就会出wsdl内容。
文章来源: http://blog.csdn.net/east271536394/article/details/6699222
增加SOAP-Header,进行对客户端的验证。在Client 做法如下:
soap信息为:
- <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
- <soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
- <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
- <wsse:Username>East</wsse:Username>
- <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">XTsaiyy</wsse:Password>
- </wsse:UsernameToken>
- </wsse:Security>
- </soapenv:Header>
- <soapenv:Body><ns3:getAllCountries xmlns:ns2="http://schema.ultraservice.neustar.com/v01/" xmlns:ns3="http://webservice.api.ultra.neustar.com/v01/"/></soapenv:Body>
- </soapenv:Envelope>
SOAP-header Client中加入SOAP-Header 来做相关的验证信息呢!代码实现如下:
1. HeaderHandler.java 类
- package cn.ultradns.soap.header;
- import java.util.Set;
- import javax.xml.namespace.QName;
- import javax.xml.soap.SOAPBody;
- import javax.xml.soap.SOAPElement;
- import javax.xml.soap.SOAPEnvelope;
- import javax.xml.soap.SOAPHeader;
- import javax.xml.soap.SOAPMessage;
- import javax.xml.ws.handler.MessageContext;
- import javax.xml.ws.handler.soap.SOAPHandler;
- import javax.xml.ws.handler.soap.SOAPMessageContext;
- /**
- *
- * @author zhangdongfang
- *
- * 2011-8-18
- */
- public class HeaderHandler implements SOAPHandler<SOAPMessageContext> {
- public boolean handleMessage(SOAPMessageContext smc) {
- Boolean outboundProperty = (Boolean) smc
- .get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
- if (outboundProperty.booleanValue()) {
- SOAPMessage message = smc.getMessage();
- try {
- SOAPBody body =smc.getMessage().getSOAPPart().getEnvelope().getBody();
- body.setPrefix("soapenv");
- SOAPEnvelope envelope = smc.getMessage().getSOAPPart()
- .getEnvelope();
- envelope.setPrefix("soapenv");
- SOAPHeader header = envelope.addHeader();
- header.setPrefix("soapenv");
- SOAPElement security = header
- .addChildElement(
- "Security",
- "wsse",
- "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd");
- SOAPElement usernameToken = security.addChildElement(
- "UsernameToken", "wsse");
- usernameToken
- .addAttribute(
- new QName("xmlns:wsu"),
- "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd");
- SOAPElement username = usernameToken.addChildElement(
- "Username", "wsse");
- username.addTextNode("knetdns");
- SOAPElement password = usernameToken.addChildElement(
- "Password", "wsse");
- password
- .setAttribute(
- "Type",
- "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText");
- password.addTextNode("XTsaiyy!!");
- // Print out the outbound SOAP message to System.out
- message.writeTo(System.out);
- System.out.println("");
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else {
- try {
- // This handler does nothing with the response from the Web
- // Service so
- // we just print out the SOAP message.
- SOAPMessage message = smc.getMessage();
- message.writeTo(System.out);
- System.out.println("");
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- return outboundProperty;
- }
- public Set getHeaders() {
- return null;
- }
- public boolean handleFault(SOAPMessageContext context) {
- return true;
- }
- public void close(MessageContext context) {
- }
- }
2. HeaderHandlerResolver.java 类
- package cn.ultradns.soap.header;
- import java.util.ArrayList;
- import java.util.List;
- import javax.xml.ws.handler.Handler;
- import javax.xml.ws.handler.HandlerResolver;
- import javax.xml.ws.handler.PortInfo;
- /**
- *
- * @author zhangdongfang
- *
- * 2011-8-18
- */
- public class HeaderHandlerResolver implements HandlerResolver {
- public List<Handler> getHandlerChain(PortInfo portInfo) {
- List<Handler> handlerChain = new ArrayList<Handler>();
- HeaderHandler hh = new HeaderHandler();
- handlerChain.add(hh);
- return handlerChain;
- }
- }
3. 在web-services 调用时设置就OK
- @Before
- public void init() {
- UltraWebServiceV01Service service = new UltraWebServiceV01Service();
- service.setHandlerResolver(new HeaderHandlerResolver());
- portType = service.getUltraWebServiceV01Port();
- }
此文章主要用于设置webService 的非法调用,必需是合法的用户,而用户提交的信息存放在soap-header中。