Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用注释将SpringJDBCTemplate注入Jersey资源类(使用XML并生成JSON)?_Jersey_Spring Jdbc - Fatal编程技术网

如何使用注释将SpringJDBCTemplate注入Jersey资源类(使用XML并生成JSON)?

如何使用注释将SpringJDBCTemplate注入Jersey资源类(使用XML并生成JSON)?,jersey,spring-jdbc,Jersey,Spring Jdbc,我已经使用JERSEY framework在当前应用程序中开发了一些REST服务。 在这个应用程序中,我将RequestXML发布到JERSEY,并得到JSON响应作为输出 web.xml <servlet-name>VVCServices</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> &

我已经使用JERSEY framework在当前应用程序中开发了一些REST服务。 在这个应用程序中,我将RequestXML发布到JERSEY,并得到JSON响应作为输出

web.xml

<servlet-name>VVCServices</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.vzw.vvc.resources</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>VVCServices</servlet-name>
    <url-pattern>/customer/*</url-pattern>
  </servlet-mapping>
Utils.java

public class Utils {

    static Logger logger = Logger.getLogger(Utils.class);

    public static Response getResponse(ByteArrayOutputStream xmlResponse, String format) {

        Response response = null;
        JSONObject jsonObject;          

        logger.info(" in utils.java -- Entry");
        try {
            jsonObject = XML.toJSONObject(xmlResponse.toString());

            if (format.equalsIgnoreCase("JSON")) {
                response = Response.ok(jsonObject.toString(),
                        MediaType.APPLICATION_JSON).build();
            } else {
                response = Response.ok(xmlResponse.toString(),
                        MediaType.APPLICATION_XML).build();
            }

        } catch (Exception e) {
             e.printStackTrace();
        }
        return response;
}

    public static  XMLGregorianCalendar getXMLGregorianCalendarNow() 
            throws DatatypeConfigurationException
    {
        logger.info("IN getXMLGregorianCalendar()- Entry");
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        DatatypeFactory datatypeFactory = DatatypeFactory.newInstance();
        XMLGregorianCalendar now = 
            datatypeFactory.newXMLGregorianCalendar(gregorianCalendar);
        logger.info("XMLGregorianCalendar:"+now) ;
        return now;
    }
}
customerInfoPost.jsp用于发布请求XML和MIME类型..etc抛出JQUERY属性

<input type="button" value="CustomerLookUpService" onClick="btnClick()"></input></br>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
var btnClick = function () {

            var reqXml = '<VVC><ServiceHeader><ServiceName>CustomerLookup</ServiceName><Operation>testing</Operation><ClientId>11333</ClientId><UserInfo><UserId>9933</UserId><UserClass>sampletestingclass</UserClass></UserInfo></ServiceHeader><Request><SearchCondition><CustomerId>2147483647</CustomerId></SearchCondition></Request></VVC>';

            var url = 'http://localhost:8080/VerizonVirtualCareServices/customer/getCustInfo';

            $.ajax({
                type:"POST",
                url: url,
                contentType: 'application/xml',
                cache: false,
                data: reqXml,
                dataType: "xml",

                success: function (data, textStatus, jqXHR) { 

                    onCompleted(data) 
                    },

                error: function (jqXHR, textStatus, errorThrown) {

                    onCompleted(textStatus); 
                    }
            });
        }
当时,为了概念验证(POC)的缘故,我应该把硬编码的数据放在数据库(oracle)中,以获取实际数据

现在我想知道如何在Jersey Rest服务中使用Spring jdbc进行数据库操作

我希望对这篇文章作出回应,任何人都可以随意分享

英语不是我的母语;请原谅键入错误

谢谢


Madhava

您可以同时使用Spring和Jersey。然后您的资源类(在您的例子中是CustomerLookup)可以初始化为一个范围为“prototype”的bean,您可以正常地注入JdbcTemplate。如何做取决于你的球衣版本。我在泽西1.8上,我会这样做

@Path("/getCustInfo")
public class CustomerLookUp {

    private static Logger logger = Logger.getLogger(CustomerLookUp.class);

    @POST
    @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })

    public Response getCustomerInfo(VVC  vvc) throws Exception {

        logger.info("getCustomerInfo - ENTRY");

        String format="XML";
        Response response = null;
        com.vzw.vvc.customer.VVC.Response response1=new com.vzw.vvc.customer.VVC.Response();
        VVC.Response.CustomerInfo cusInfo =  new VVC.Response.CustomerInfo();    

          cusInfo.setEnrolled(true);
          cusInfo.setEnrolledDate(Utils.getXMLGregorianCalendarNow());
          cusInfo.setAccountNumber("23454");
          cusInfo.setDeviceId(new Long("56566"));
          cusInfo.setPlanId(new Long("4574963"));
          cusInfo.setBalancePastDue(true);
          response1.setCustomerInfo(cusInfo);
          vvc.setResponse(response1);

        ByteArrayOutputStream xml = new ByteArrayOutputStream();
        JAXBContext jaxbContext = JAXBContext.newInstance(VVC.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        //output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(vvc,xml);
        response = Utils.getResponse(xml,format);
        logger.info("getCustomerInfo - Exit");
        return response;
    }
}
根据您的示例,将web.xml中的servlet更改为:

<servlet>
  <servlet-name>VVCServices</servlet-name>
  <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
  <init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.vzw.vvc.resources</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
当然,有很多方法可以初始化Springbeans,所以我不知道这是否适合您当前的方法,但这就是我在应用程序中所做的,它工作得很好

如果您使用的是Jersey 2.x,这里有一个示例:

<servlet>
  <servlet-name>VVCServices</servlet-name>
  <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
  <init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.vzw.vvc.resources</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
@Component
@Scope("prototype")
@Path("/getCustInfo")
public class CustomerLookUp {
    private static Logger logger = Logger.getLogger(CustomerLookUp.class);

    @Autowired
    private JdbcTemplate jdbcTemplate

    @POST
    @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
    public Response getCustomerInfo(VVC  vvc) throws Exception {
        ... rest of your code ...
    }
}