📄 booktitleproxyservlet.java
字号:
// Fig. 14.7: BookTitleProxyServlet.java.// BookTitleProxyServlet uses JAXM and SAAJ to invoke the Book// Titles Web service.package com.deitel.jws1.j2me.servlet;// Java core packagesimport java.io.*;import java.util.Iterator;// Java extension packagesimport javax.servlet.*;import javax.servlet.http.*;import javax.xml.soap.*;import javax.xml.messaging.*;public class BookTitleProxyServlet extends HttpServlet { private SOAPConnectionFactory soapConnectionFactory; private URLEndpoint urlEndpoint; private MessageFactory messageFactory; // initialize BookTitleProxyServlet public void init() throws ServletException { // create factory objects try { // factory for establishing point-to-point connections soapConnectionFactory = SOAPConnectionFactory.newInstance(); // factory for building SOAP messages messageFactory = MessageFactory.newInstance(); } // handle exception in initializing factory objects catch ( SOAPException exception ) { throw new ServletException( exception.getMessage() ); } String endpoint = getServletConfig().getInitParameter( "SERVICE_URL" ); // define Web-service URL urlEndpoint = new URLEndpoint( endpoint ); } // end constructor // use JAXM to invoke remote Web service public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { // invoke Web service and convert result to String array try { SOAPMessage responseMessage = sendSoapRequestMessage(); // store response message in String array String titles[] = handleSoapResponseMessage( responseMessage ); DataOutputStream out = new DataOutputStream( new BufferedOutputStream( response.getOutputStream() ) ); // send String to client for ( int i = 0; i < titles.length; i++ ) { for ( int j = 0; j < titles[ i ].length(); j++ ) out.writeChar( titles[ i ].charAt( j ) ); out.writeChar( '\n' ); } out.close(); } // handle exception in sending or receiving SOAP message catch( SOAPException exception ) { throw new IOException( exception.getMessage() ); } // handle exception in populating bookTitles String array catch ( ArrayIndexOutOfBoundsException exception ) { throw new IOException( exception.getMessage() ); } } // end method doGet // invoke remote Web service by sending SOAP request private SOAPMessage sendSoapRequestMessage() throws SOAPException { // use SOAPConnectionFactory to create SOAP connection SOAPConnection soapConnection = soapConnectionFactory.createConnection(); // use MessageFactory to create SOAP message SOAPMessage soapRequestMessage = messageFactory.createMessage(); // send SOAP message to Web service SOAPMessage soapResponseMessage = soapConnection.call( soapRequestMessage, urlEndpoint ); soapConnection.close(); return soapResponseMessage; } // end method sendSoapRequestMessage // convert SOAP message returned by Web service to array of // Strings, in which each String represents a book title private String[] handleSoapResponseMessage( SOAPMessage soapResponseMessage ) throws SOAPException { // obtain references to response message elements SOAPPart responsePart = soapResponseMessage.getSOAPPart(); SOAPEnvelope responseEnvelope = responsePart.getEnvelope(); SOAPBody responseBody = responseEnvelope.getBody(); // obtain Iterator of all child elements of element Body Iterator responseBodyChildElements = responseBody.getChildElements(); // extract element titles from SOAP message element Body SOAPBodyElement titlesElement = ( SOAPBodyElement ) responseBodyChildElements.next(); // extract number of book titles from element Titles int bookCount = Integer.parseInt( titlesElement.getAttributeValue( responseEnvelope.createName( "bookCount" ) ) ); // create array of Strings that represent book titles String bookTitles[] = new String[ bookCount ]; // use Iterator to obtain child elements of element Titles Iterator titleIterator = titlesElement.getChildElements( responseEnvelope.createName( "title" ) ); // store each book title in bookTitles String array int i = 0; while ( titleIterator.hasNext() ) { SOAPElement titleElement = ( SOAPElement ) titleIterator.next(); bookTitles[ i++ ] = titleElement.getValue(); } return bookTitles; } // end method handleSoapResponseMessage} // end class BookTitleProxyServlet
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -