上来先直接搭项目
pom.xml
注意:springboot和cxf的对应版本
这里是2.3.0.RELEASE和3.3.2
也可以是1.5.8.RELEASE和3.2.5
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
<dependencies>
<!--cxf-->
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-spring-boot-starter-jaxws</artifactId>
<version>3.3.2</version>
</dependency>
<!--其他功能包-->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
<!--XML文件解析-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
创建一个接口:
import org.dom4j.DocumentException;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.io.IOException;
@WebService
public interface CxfWebService {
@WebMethod
String JSON(@WebParam(name = "appSerialNumber") String appSerialNumber, @WebParam(name = "utsNodeInfo") String utsNodeInfo);
}
创建一个接口实现类:
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.springframework.stereotype.Component;
import javax.jws.WebParam;
import javax.jws.WebService;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
@Component
@WebService(serviceName="CxfWebService",//对外发布的服务名
name = "CxfWebService",
targetNamespace="http://e.d.c.b.a/",//指定你想要的名称空间,通常使用使用包名反转
endpointInterface= "a.b.c.d.e.CxfWebService") //包名.CxfWebService
public class CxfWebServiceImpl implements CxfWebService{
public String JSON( String appSerialNumber, String utsNodeInfo) {
return "SUCCESS";
}
}
创建一个config文件
import a.b.c.d.e.CxfWebServiceImpl;
import org.apache.cxf.Bus;
import org.apache.cxf.bus.spring.SpringBus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.apache.cxf.transport.servlet.CXFServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;
@Configuration
public class CxfConfig {
@Bean
public ServletRegistrationBean cxfServlet() {
return new ServletRegistrationBean(new CXFServlet(), "/cxf/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public CxfWebService cxfWebService() {
return new CxfWebServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), cxfWebService());
endpoint.publish("/services");
return endpoint;
}
}
启动项目,页面访问(换成你的服务端口)http://localhost:8090/cxf/services?wsdl即成功了。
创建请求的body:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://e.d.c.b.a/">
<soapenv:Header/>
<soapenv:Body>
<ser:JSON>
<!--Optional:-->
<appSerialNumber>1</appSerialNumber>
<!--Optional:-->
<utsNodeInfo>2</utsNodeInfo>
</ser:JSON>
</soapenv:Body>
</soapenv:Envelope>
注意的常见问题(踩过的坑):
1.缺少@WebParam注解;
2.springboot和cxf版本不对应;
3.cxf的jar包和项目jar包冲突;
本文演示了如何在SpringBoot项目中集成CXF来创建一个WebService接口。涉及到的关键点包括pom.xml配置文件中springboot和cxf版本的选择,创建@WebService接口及其实现类,以及在配置类中发布服务。此外,还提供了可能出现的问题和解决建议,如添加@WebParam注解,版本匹配,处理jar包冲突等。
5353

被折叠的 条评论
为什么被折叠?



