我对这个烦人的问题的最终解决方案是:
application.properties:
spring.datasource.url=jdbc:oracle:oci:@(DEscriptION = (ADDRESS = (PROTOCOL = TCP)(HOST = host_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = service_name)))spring.datasource.username=usrspring.datasource.password=passspring.datasource.driver-class-name=oracle.jdbc.OracleDriver#Extra configspring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource#jpa config.spring.jpa.show-sql=truespring.jpa.hibernate.ddl-auto=updatespring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImplspring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
第一个Spring-Boot应用程序(来自spring-boot Inicializr):
package br.com.example.solicitacaoprocedimento30302;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class Solicitacaoprocedimento30302Application { public static void main(String[] args) { SpringApplication.run(Solicitacaoprocedimento30302Application.class, args); }}第二个Servlet初始化程序(来自spring-boot Inicializr):
package br.com.example.solicitacaoprocedimento30302;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Solicitacaoprocedimento30302Application.class); }}端点(jaxws导入并带有WebApplicationContext的更改):
package br.com.example.solicitacaoprocedimento30302;import javax.annotation.Resource;import javax.jws.WebService;import javax.servlet.ServletContext;import javax.xml.ws.WebServiceContext;import javax.xml.ws.handler.MessageContext;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.context.WebApplicationContext;import org.springframework.web.context.support.WebApplicationContextUtils;import org.springframework.stereotype.Service;import br.gov.ans.padroes.tiss.schemas.AutorizacaoProcedimentoWS;import br.gov.ans.padroes.tiss.schemas.SolicitacaoProcedimentoWS;import br.com.example.solicitacaoprocedimento30302.controller.TissSolicitacaoProcedimentoController;import br.gov.ans.tiss.ws.tipos.tisssolicitacaoprocedimento.v30302.TissFault;@Service("tissSolicitacaoProcedimento")@WebService(serviceName = "tissSolicitacaoProcedimento", portName = "tissSolicitacaoProcedimento_Port", endpointInterface = "br.gov.ans.tiss.ws.tipos.tisssolicitacaoprocedimento.v30302.TissSolicitacaoProcedimentoPortType", targetNamespace = "http://www.ans.gov.br/tiss/ws/tipos/tisssolicitacaoprocedimento/v30302", wsdlLocation = "WEB-INF/wsdl/tissSolicitacaoProcedimentoV3_03_02.wsdl")public class TissSolicitacaoProcedimentoWSEndpoint { @Autowired private TissSolicitacaoProcedimentoController tissSolicitacaoProcedimentoController; @Resource private WebServiceContext context; public AutorizacaoProcedimentoWS tissSolicitacaoProcedimentoOperation(SolicitacaoProcedimentoWS solicitacaoProcedimento) throws TissFault { WebApplicationContext webApplicationContext = null; ServletContext servletContext = (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT); webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext); tissSolicitacaoProcedimentoController = webApplicationContext.getBean(TissSolicitacaoProcedimentoController.class); return tissSolicitacaoProcedimentoController.tissSolicitacaoProcedimentoOperation(solicitacaoProcedimento); }}控制器接口:
package br.com.example.solicitacaoprocedimento30302.controller;import br.gov.ans.padroes.tiss.schemas.AutorizacaoProcedimentoWS;import br.gov.ans.padroes.tiss.schemas.SolicitacaoProcedimentoWS;import br.gov.ans.tiss.ws.tipos.tisssolicitacaoprocedimento.v30302.TissFault;public interface TissSolicitacaoProcedimentoController { public AutorizacaoProcedimentoWS tissSolicitacaoProcedimentoOperation(SolicitacaoProcedimentoWS solicitacaoProcedimento) throws TissFault;}控制器实现:
package br.com.example.solicitacaoprocedimento30302.controller;import br.com.example.solicitacaoprocedimento30302.TissSolicitacaoProcedimentoWSEndpoint;import org.springframework.beans.factory.annotation.Autowired;import br.gov.ans.padroes.tiss.schemas.AutorizacaoProcedimentoWS;import br.gov.ans.padroes.tiss.schemas.SolicitacaoProcedimentoWS;import br.gov.ans.padroes.tiss.schemas.ObjectFactory;import br.com.example.solicitacaoprocedimento30302.dao.ConfigVlrDAO;import br.gov.ans.tiss.ws.tipos.tisssolicitacaoprocedimento.v30302.TissFault;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger;import org.springframework.stereotype.Service;@Service("tissSolicitacaoProcedimentoController")public class TissSolicitacaoProcedimentoControllerImpl implements TissSolicitacaoProcedimentoController { @Autowired private ConfigVlrDAO configVlrDAO; public AutorizacaoProcedimentoWS tissSolicitacaoProcedimentoOperation(SolicitacaoProcedimentoWS solicitacaoProcedimento) throws TissFault { ObjectFactory objFact = new ObjectFactory(); AutorizacaoProcedimentoWS retAutorizacaoProcedimentoWS = objFact.createAutorizacaoProcedimentoWS(); retAutorizacaoProcedimentoWS.setCabecalho(objFact.createAutorizacaoProcedimentoWSCabecalho()); retAutorizacaoProcedimentoWS.setAutorizacaoProcedimento(objFact.createAutorizacaoProcedimentoWSAutorizacaoProcedimento()); try { String item = configVlrDAO.getValor("SIS", "OBRIGA_LOGIN_WEB_SERVICE"); retAutorizacaoProcedimentoWS.setHash("item=" + item); return retAutorizacaoProcedimentoWS; } catch (SQLException sqlEx) { Logger.getLogger(TissSolicitacaoProcedimentoWSEndpoint.class.getName()).log(Level.SEVERE, null, sqlEx); throw new RuntimeException("Erro ao acessar o banco! " + sqlEx.getMessage(), sqlEx); } catch (Exception ex) { Logger.getLogger(TissSolicitacaoProcedimentoWSEndpoint.class.getName()).log(Level.SEVERE, null, ex); throw new RuntimeException("Falha default: " + ex.getMessage(), ex); } }}仓库接口:
package br.com.example.solicitacaoprocedimento30302.dao;import java.sql.SQLException;public interface ConfigVlrDAO { public String getValor(String owner, String variavel) throws SQLException, Exception;}存储库实现:
package br.com.example.solicitacaoprocedimento30302.dao;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.Types;import java.sql.SQLException;import org.springframework.stereotype.Repository;import org.springframework.beans.factory.annotation.Autowired;import org.apache.tomcat.jdbc.pool.DataSource;@Repository("configVlrDAO")public class ConfigVlrDAOImpl implements ConfigVlrDAO{ @Autowired private DataSource dataSource; // Don't need to create the DataSource bean! @Override public String getValor(String owner, String variavel) throws SQLException, Exception { String ret = null; Integer nErroProc = 0; String sErroProc = null; String call = "{ call OWNER.PCG_OWNER.SPR_CONFIG_VLR(?, ?, ?, ?, ?) }"; try (Connection conn = dataSource.getConnection()) { CallableStatement cstmt = conn.prepareCall(call); cstmt.setString(1, owner); cstmt.setString(2, variavel); cstmt.registerOutParameter(3, Types.VARCHAR); cstmt.registerOutParameter(4, Types.NUMERIC); cstmt.registerOutParameter(5, Types.VARCHAR); cstmt.execute(); ret = cstmt.getString(3); nErroProc = cstmt.getInt(4); sErroProc = cstmt.getString(5); if (nErroProc != 0) { throw new Exception("Proc error = " + nErroProc.toString() + " - " + sErroProc); } } return ret; }}


