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://...") 

 

https://blog.csdn.net/qq_34207366/article/details/119108448

 

posted on 2019-10-31 14:55  LJD泊水  阅读(325)  评论(0编辑  收藏  举报