@webservice报错org.apache.cxf.common.i18n.UncheckedException: No operation was found with
  XHDrlE4yaUzu 2023年11月02日 44 0


文章目录

1. 现象

整合spring+cxf的webservice,成功发布了wsdl,但在调用的时候报错
org.apache.cxf.common.i18n.UncheckedException: No operation was found with;

2. 解决办法1

: 在service接口中添加targetNamespace

package com.gblfy.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService(targetNamespace = "http://impl.service.gblfy.com/")
public interface IUserService {

@WebMethod
public String getCxf(@WebParam(name = "reqXml") String reqXml);
}

实现类

package com.gblfy.service.impl;

import com.gblfy.service.IUserService;

import javax.jws.WebService;

@WebService
public class UserServiceImpl implements IUserService {

@Override
public String getCxf(String reqXml) {

System.out.println("接收到的报文:" + reqXml);
return "OK";
}
}

客户端

/**
* 单/多参调用工具类(Object类型)
*
* @param cxfUrl url地址
* @param method 调用方法名
* @param reqXml 发送报文体
* @return res 返回结果
* @throws Exception 若有异常,在控制台输出异常,并将异常抛出
*/
public static String cxfClientParam(String cxfUrl, String method, Object... reqXml) throws Exception {
String res = null;
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(cxfUrl);

// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
Object[] objects = new Object[0];
try {
// 基本格式:invoke("方法名",参数1,参数2,参数3....);
objects = client.invoke(method, reqXml);
res = objects[0].toString();
System.out.println("返回数据:" + res);
} catch (java.lang.Exception e) {
e.printStackTrace();
throw e;
}
return res;
}
3. 解决办法2

使用 QName 然后添加 service接口的地址

@webservice报错org.apache.cxf.common.i18n.UncheckedException: No operation was found with_客户端

package com.gblfy.service.client;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;
import org.springframework.stereotype.Component;

import javax.xml.namespace.QName;

/**
* cxf客户端调用(企业内部已封装)
*
* @author gblfy
* @date 2021-09-17
*/
@Component
public class CxfClient {
public static void main(String[] args) throws Exception {
String cxfUrl = "http://127.0.0.1:8080/spring_cxf_war/webservice/userWS?wsdl";
String method = "getCxf";
String reqXml = "cxf请求报文";

//调用服务
CxfClient.cxfClientParam(cxfUrl, method, reqXml);
}

/**
* 单/多参调用工具类(Object类型)
*
* @param cxfUrl url地址
* @param method 调用方法名
* @param reqXml 发送报文体
* @return res 返回结果
* @throws Exception 若有异常,在控制台输出异常,并将异常抛出
*/
public static String cxfClientParam(String cxfUrl, String method, String reqXml) throws Exception {
String res = null;
// 创建动态客户端
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client client = dcf.createClient(cxfUrl);

// 需要密码的情况需要加上用户名和密码
// client.getOutInterceptors().add(new ClientLoginInterceptor(USER_NAME, PASS_WORD));
Object[] objects = new Object[0];
try {
// 基本格式:invoke("方法名",参数1,参数2,参数3....);
QName qName = new QName("http://impl.service.gblfy.com/",method);
objects = client.invoke(qName, reqXml);
res = objects[0].toString();
System.out.println("返回数据:" + res);
} catch (Exception e) {
e.printStackTrace();
throw e;
}
return res;
}
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  YgmmQQ65rPv4   2023年11月19日   13   0   0 Java应用程序
  Y8XIq1u6ceQW   2023年11月19日   25   0   0 Java
  AeUHztwqqxTz   2023年11月02日   22   0   0 Javatomcatapache
  Adn1GC3kyTwd   2023年11月02日   40   0   0 bashmavenapache
XHDrlE4yaUzu
最新推荐 更多