• java-WebService


    1、服务端发布webservice:

    @WebService(targetNamespace = "http://tempuri.org/ns.xsd")
    @BindingType(value = SOAPBinding.SOAP12HTTP_BINDING)
    public class WSServices {
    //ws服务端提供的方法
    public String initSystem(@WebParam(name = "xml",targetNamespace = "http://tempuri.org/ns.xsd") String xml){      
            //。。。  
            return sss;
        }
    }

    2、客户端调用:

    一、采用wsdl自动生成客户端调用

    二、采用CXF调用WebService:

    添加依赖包

    <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>3.1.16</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http-jetty</artifactId>
                <version>3.1.16</version>
            </dependency>

    调用

    import com.alibaba.fastjson.JSONObject;
    import org.apache.cxf.endpoint.Client;
    import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
    import org.apache.log4j.Logger;
    import org.json.XML;
    import org.springframework.stereotype.Component;
    import org.springframework.util.StringUtils;
    
    import javax.xml.namespace.QName;
    import java.util.ResourceBundle;
    
    @Component
    public class Async2tda {
        private static final Logger logger = Logger.getLogger(Async2tda.class);
        private static ResourceBundle resource = ResourceBundle.getBundle("application");
    
        private static Client client;
        private static QName qName;
    
      //多次调用wsClient,Client和QName初始化一次
        public void sendTdaXML(String xml){
            try {
                if (!StringUtils.isEmpty(xml)) {
              //。。。
                    if (client == null || qName == null){
                        client = getClient();
                        qName = getQName();
                    }
                    if (client != null && qName != null){
                        Object[] o = client.invoke(qName,xmlStr);
                    }
                }
            } catch (Exception e) {
            }
        }
    
        public static Client getClient (){
            String newUrl = null;
            JaxWsDynamicClientFactory dcf = null;
            try {
                String ip = resource.getString("82ws.ip");
                String port = resource.getString("82ws.port");
                newUrl = "http://"+ip+":"+port+"/services/ThirdBayonetService?wsdl";
                dcf = JaxWsDynamicClientFactory.newInstance();
                return dcf.createClient(newUrl);
            } catch (Exception e) {
                return null;
            }
        }
    
        public static QName getQName(){
            return new QName("http://.....com", "insertInfo");
        }
    }

    3、常见问题:

    1、A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.

    原因:soap协议不匹配,Server端用的是SOAP1.1,Client端用的是SOAP1.2

    解决方法:在接口或类实现上添加@BindingType

     2、javax.xml.bind.UnmarshalException: 意外的元素 (uri:"xxx", local:"xml")。所需元素为<{}arg0>

    解决方法:接口暴露出来的方法需要加上@WebParam注解@WebParam(name = "xml",targetNamespace = "http://...") 

  • 相关阅读:
    树莓派3(Raspbain系统)安装.net环境
    CSS3实现鼠标悬停扩展效果
    WINIO64位模拟键鼠操作
    json在线校验
    阿里云ali-oss图片增加水印
    babel使用中不想使用 严格模式 如何去除?
    记录移动端html界面中底部输入框触发焦点时键盘会把输入框遮挡的问题
    nodejs 项目,请求返回Invalid Host header问题
    css如何画出类似原生的线条?
    js回到顶部 动画速度 (自己记录)
  • 原文地址:https://www.cnblogs.com/lijianda/p/11771200.html
Copyright © 2020-2023  润新知