[英]Set Spring profile in Tomcat web app with no web.xml file
[英]running spring mvc web app and jaxws soap web service in single tomcat instance having 1 web.xml file
我正在做一個 zoho 到 quickbooks 的集成。 在其中,我為 quickbooks 桌面創建了 Web 應用程序和肥皂服務以與之通信。 我的 web 應用程序可以很好地使用 spring 注釋,但自動裝配的注釋不起作用。 我想知道你是否可以保留 web.xml 配置如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
<display-name>zohoquickbooks</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>2</session-timeout>
</session-config>
<servlet>
<servlet-name>zohoquickbooksdispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/zohoquickbooks-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>zohoquickbooksdispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>qbservice</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>qbservice</servlet-name>
<url-pattern>/qbservice</url-pattern>
</servlet-mapping>
</web-app>
此配置有效。 web.xml 中的 jaxws 服務存在一個問題。 實現類的對象是由 jax-ws 容器而不是由 spring 啟動的,因此自動裝配該類中的其他對象不起作用。 您可以通過在此 URL“https://dzone.com/articles/autowiring-spring-beans-into-classes-not-managed-by-spring”中指定的方式將 spring 托管對象轉換為非 spring 托管對象。 否則,此配置工作正常。 您可以在同一端口上的同一容器上運行 Web 應用程序和肥皂服務。 只是url路徑需要不同。
沒有任何xml的spring boot很容易。
您可以使用依賴項:cxf-spring-boot-starter-jaxws。 https://mvnrepository.com/artifact/org.apache.cxf/cxf-spring-boot-starter-jaxws
它將您的 spring 服務與 jaxws 服務分開。 默認情況下,它將在 url 公開 jaxws 服務:http://localhost:8080/services
您可以在此處閱讀詳細信息https://cxf.apache.org/docs/springboot.html 。
import org.apache.cxf.Bus;
import org.apache.cxf.jaxws.EndpointImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.xml.ws.Endpoint;
@Configuration
public class ApacheCxfConfig {
@Autowired
private Bus bus;
@Bean
public Endpoint endpoint() {
EndpointImpl endpoint = new EndpointImpl(bus, new NumberConversionSoapTypeImpl());
endpoint.publish("/hello");
return endpoint;
}
}
@WebService(name = "NumberConversionSoapType", targetNamespace = "http://www.dataaccess.com/webservicesserver/")
@XmlSeeAlso({
ObjectFactory.class
})
public interface NumberConversionSoapType {
/**
* Returns the word corresponding to the positive number passed as parameter. Limited to quadrillions.
*
* @param ubiNum
* @return
* returns java.lang.String
*/
@WebMethod(operationName = "NumberToWords")
@WebResult(name = "NumberToWordsResult", targetNamespace = "http://www.dataaccess.com/webservicesserver/")
@RequestWrapper(localName = "NumberToWords", targetNamespace = "http://www.dataaccess.com/webservicesserver/", className = "az.soap.NumberToWords")
@ResponseWrapper(localName = "NumberToWordsResponse", targetNamespace = "http://www.dataaccess.com/webservicesserver/", className = "az.soap.NumberToWordsResponse")
public String numberToWords(
@WebParam(name = "ubiNum", targetNamespace = "http://www.dataaccess.com/webservicesserver/")
BigInteger ubiNum);
}
@Service
@WebService(name = "NumberConversionSoapType", targetNamespace = "http://www.dataaccess.com/webservicesserver/")
public class NumberConversionSoapTypeImpl implements NumberConversionSoapType {
@Override
public String numberToWords(BigInteger ubiNum) {
System.out.println("numberToWords");
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.