如果你用springboot时遇到了webservice启动成功了,但是其他的接口却变404了
配置文件可以参考下文
webservice有别于控制器里的api
同一个端口,可以同时发布webservice服务和普通api
可以这么建项目
com.xxx.xxx
–controller
–webservice
其中controller文件夹里都是api接口
webservice文件夹里都是webservice服务和一个配置文件
webservie中
一个接口,一个实现,就是一个服务,然后还有一个配置文件,可以是xml配置文件,可以是。java配置文件,目的都是为了bean的注入。
如果是用springboot 建议用.java配置文件的方式注入bean
和普通api的方式一样,先写接口,再写实现
@WebService(name = "DemoService", // 暴露服务名称
targetNamespace = "http://xxx.xxx.com/xxx"// 命名空间,一般是接口的包名倒序
)
public interface DataSynchronizeService { =
public String test(String testXML);
}
import javax.jws.WebService;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
@WebService(serviceName = "DemoService", // 与接口中指定的name一致
targetNamespace = "http://xxx.xxx.com/xxx", // 与接口中的命名空间一致,一般是接口的包名倒
endpointInterface = "包路径.DataSynchronizeService"// 接口地址
)
public class DataSynchronizeServiceImpl implements DataSynchronizeService{
@Override
public String test(String testXML){
//对xml的处理
return "成功";
}
}
配置类
@Configuration
public class WebServiceConfig {
//此处对bean方法的命名 必须用这个,否则其他普通接口会变成404
@Bean
public ServletRegistrationBean disServlet(){
return new ServletRegistrationBean(new CXFServlet() , "/service/*");
}
@Bean(name = Bus.DEFAULT_BUS_ID)
public SpringBus springBus() {
return new SpringBus();
}
@Bean
public DataSynchronizeServiceImpl DataSynchronizeService(){
return new DataSynchronizeServiceImpl();
}
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(springBus(), DataSynchronizeService());//绑定要发布的服务
endpoint.publish("/api"); //显示要发布的名称
return endpoint;
}
}
启动项目,最后在浏览器输入 ip:port/service/api?xsdl
查看