docs: @Override
      public void handleMessage(Message message) throws Fault {
          String method = (String) message.get(Message.HTTP_REQUEST_METHOD);
          String query = (String) message.get(Message.QUERY_STRING);
          if (!"GET".equals(method) || StringUtils.isEmpty(query)) {
              return;
          }
          String baseUri = (String) message.get(Message.REQUEST_URL);
          String ctx = (String) message.get(Message.PATH_INFO);
  
          //cannot have two wsdl's being written for the same endpoint at the same
          //time as the addresses may get mixed up
          synchronized (message.getExchange().getEndpoint()) {
              Map<String, String> map = UrlUtils.parseQueryString(query);
              if (isRecognizedQuery(map, baseUri, ctx,
                                    message.getExchange().getEndpoint().getEndpointInfo())) {
  
                  try {
                      Conduit c = message.getExchange().getDestination().getBackChannel(message, null, null);
                      Message mout = new MessageImpl();
                      mout.setExchange(message.getExchange());
                      message.getExchange().setOutMessage(mout);
                      //Customize the response to 404
                      mout.put(Message.RESPONSE_CODE, HttpURLConnection.HTTP_NOT_FOUND);
                      mout.put(Message.CONTENT_TYPE, "text/xml");
                      c.prepare(mout);
                      OutputStream os = mout.getContent(OutputStream.class);
  
                      Document doc = getDocument(message,
                                                 baseUri,
                                                 map,
                                                 ctx,
                                                 message.getExchange().getEndpoint().getEndpointInfo());
  
                      String enc = null;
                      try {
                          enc = doc.getXmlEncoding();
                      } catch (Exception ex) {
                          //ignore - not dom level 3
                      }
                      if (enc == null) {
                          enc = "utf-8";
                      }
  
                      XMLStreamWriter writer = null;
                      try {
                          writer = StaxUtils.createXMLStreamWriter(os, enc);
                          StaxUtils.writeNode(doc, writer, true);
                          message.getInterceptorChain().abort();
                          writer.flush();
                          os.flush();
                      } catch (IOException ex) {
                          if (TraceComponent.isAnyTracingEnabled() && tc.isInfoEnabled()) {
                              Tr.info(tc, "error.write.wsdl.stream", ex);
                          }
                          //LOG.log(Level.FINE, "Failure writing full wsdl to the stream", ex);
                          //we can ignore this.   Likely, whatever has requested the WSDL
                          //has closed the connection before reading the entire wsdl.  
                          //WSDL4J has a tendency to not read the closing tags and such
                          //and thus can sometimes hit this.   In anycase, it's 
                          //pretty much ignorable and nothing we can do about it (cannot
                          //send a fault or anything anyway
                      } finally {
                          if (writer != null) {
                              try {
                                  writer.close();
                              } catch (Exception e) {
                              }
                          }
                          try {
                              os.close();
                          } catch (Exception e) {
                          }
                      }
                  } catch (IOException e) {
                      throw new Fault(e);
                  } catch (XMLStreamException e) {
                      throw new Fault(e);
                  } finally {
                      message.getExchange().setOutMessage(null);
                  }
              }
          }
      }