mode de fonctionnement du client webservice

Avant que la société ne prenne des dispositions pour que je fasse l'interface avec deux autres sociétés, la méthode d'appel était sous la forme d'un service Web, j'ai construit un projet Springboot.

Il existe différentes manières sur Internet: en raison de l'incohérence du serveur généré par les deux sociétés, le client ne peut pas utiliser une seule méthode lors de l'appel. J'ai donc trouvé deux modes de mise en œuvre, le principe est: moins de code, pas encombrant, encore moins dégénérer du code et autres.

Méthode d'appel 1:

Cette méthode nécessite que le chemin d'accès au serveur tarnamespace et le chemin du package soient identiques. S'ils sont identiques, les méthodes suivantes sont généralement efficaces. Sinon, une erreur se produira:

org.apache.cxf.common.i18n.UncheckedException: aucune opération n'a été trouvée avec le nom {http://control.webservice.ccwl.com/}xxx

Le code appelant est le suivant:

<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web-services</artifactId>
		</dependency>
<dependency>
			<groupId>org.apache.cxf</groupId>
			<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
			<version>3.2.4</version>
		</dependency>
private void sendDataForAnt() throws Exception{
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient("wsdl路径");
Object[] objects = new Object[0];
objects = client.invoke("方法名称", "参数");
 

    }

Appelez la deuxième méthode:

Lorsqu'il s'agit de déboguer l'interface de la deuxième société, la méthode ci-dessus ne fonctionnera pas et l'erreur est la même que ci-dessus. Diverses méthodes sur Internet ont été essayées. La méthode httpclient, url et même la génération de code local basé sur wsdl ne fonctionnera pas. Enfin, quelqu'un m'a rappelé que j'étais inspiré.

Dépendre d'abord du package:

<dependency>
			<groupId>org.apache.axis</groupId>
			<artifactId>axis</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>org.apache.axis</groupId>
			<artifactId>axis-jaxrpc</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>wsdl4j</groupId>
			<artifactId>wsdl4j</artifactId>
			<version>1.6.2</version>
		</dependency>
		<dependency>
			<groupId>commons-discovery</groupId>
			<artifactId>commons-discovery</artifactId>
			<version>0.2</version>
		</dependency>

Code:

public static String axisForDongFeng(String jsonStr) throws Exception {
        //url
        String wsdlurl = "xxx/gpsservice?wsdl";
        //targetNamespace
        String targetNamespace = "http://webservice.xx.com/";
        //namespaceUri
        String namespaceUri = "http://control.webservice.xx.com/";
        //调用的具体方法名称
        String method = "addUser";
        //方法参数名称
        String localPart = "list";
        // 创建一个服务(service)调用(call)
        org.apache.axis.client.Service service = new org.apache.axis.client.Service();
        // 通过service创建call对象
        Call call = (Call) service.createCall();
        // 设置service所在URL,wsdld地址
        call.setTargetEndpointAddress(new java.net.URL(wsdlurl));
        //调用接口的targetNamespace和具体方法名称
        call.setOperationName(new QName(targetNamespace, method));
        call.setUseSOAPAction(true);
        //变量最好只是用String类型,其他类型会报错
        call.addParameter(
                new QName(namespaceUri, localPart),
                //设置参数名 state  第二个参数表示String类型,第三个参数表示入参
                org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN
        );
        // 设置返回类型
        call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
        String jsonString = (String) call.invoke(new Object[]{jsonStr});
      
        return jsonString;
    }

Remarque: targetNamespace et namespaceUri sont incohérents.

A publié 23 articles originaux · J'aime 3 · Visiteurs 6858

Je suppose que tu aimes

Origine blog.csdn.net/weixin_41834814/article/details/87879247
conseillé
Classement