corner
Home      Know How         Artikel      Webservices mit PDA      Listings

Listings zu Web Service mit Linux PDAs

Listing 1 Den Request generieren

/**
 * Create the request document and return it
 *
 */
xmlDocPtr getRequest(xmlChar* term, xmlChar* srcLang, xmlChar* trgLang) {
  xmlDocPtr  doc;
  xmlNodePtr tree, subtree, subsubtree;
  xmlNsPtr   SOAP, xsd, xsi, ns1;
  doc = xmlNewDoc((xmlChar*)"1.0");
  doc->children = xmlNewDocNode(doc,NULL,(xmlChar*)"Envelope",NULL);
  SOAP = xmlNewNs(doc->children
             ,(xmlChar*)"http://schemas.xmlsoap.org/soap/envelope/",
              (xmlChar*)"SOAP-ENV");
  xsi  = xmlNewNs(doc->children
             ,(xmlChar*)"http://www.w3.org/1999/XMLSchema-instance"
             ,(xmlChar*)"xsi");
  xsd  = xmlNewNs(doc->children
             ,(xmlChar*)"http://www.w3.org/1999/XMLSchema"
             ,(xmlChar*)"xsd");
  xmlSetNs(doc->children,SOAP);
  tree       = xmlNewChild(doc->children, SOAP, (xmlChar*)"Body", NULL);
  subtree    = xmlNewChild(tree,NULL,(xmlChar*)"getTranslations",NULL);
  ns1  = xmlNewNs(subtree
             ,(xmlChar*)"urn:demo1:translate"
             ,(xmlChar*)"ns1");
  xmlSetNs(subtree,ns1);
  xmlSetNsProp(subtree,SOAP,(xmlChar*)"encoding-style",
	       (xmlChar*)"http://schemas.xmlsoap.org/soap/encoding/");

  subsubtree = xmlNewChild(subtree,NULL,(xmlChar*)"term",term);
  xmlSetNs(subsubtree,NULL);
  xmlSetNsProp(subsubtree,xsi,(xmlChar*)"type"
             ,(xmlChar*)"xsd:string");

  subsubtree = xmlNewChild(subtree,NULL,(xmlChar*)"srcLanguage",srcLang);
  xmlSetNs(subsubtree,NULL);
  xmlSetNsProp(subsubtree,xsi,(xmlChar*)"type"
             ,(xmlChar*)"xsd:string");

  subsubtree = xmlNewChild(subtree,NULL,(xmlChar*)"targetLanguage",trgLang);
  xmlSetNs(subsubtree,NULL);
  xmlSetNsProp(subsubtree,xsi,(xmlChar*)"type"
             ,(xmlChar*)"xsd:string");
  return doc;
}

Listing 2: Reply senden und Request parsen

xmlDocPtr performRequest(xmlDocPtr doc, char* endPoint) {
  xmlDocPtr result;
  char*  headers = "Content-Type: text/xml; charset=utf-8\nSOAPAction: \"\"\n";
  char*     input;
  char*     docbuffer;
  char      temp[2];
  int       size;
  xmlChar*  doctxt;
  int       doclen;
  xmlNanoHTTPInit();
  int       x;
  int       bytesRead;
  size = 0;
  xmlDocDumpFormatMemoryEnc(doc,&doctxt,&doclen,"utf-8",1);
  void* ctx = xmlNanoHTTPMethod (endPoint,
                     "POST",
                     (char*)doctxt,
		     NULL,
                     headers);
  char output[5096];
  bytesRead = xmlNanoHTTPRead(ctx,&output,1024);
  xmlParserCtxtPtr pushCtx;
  pushCtx = xmlCreatePushParserCtxt(NULL, NULL,
                                    output, bytesRead, NULL);
  while (bytesRead) {
     xmlParseChunk(pushCtx, output, bytesRead, 0);
     bytesRead = xmlNanoHTTPRead(ctx,&output,1024);
  }
  output[0]='\0';
  xmlParseChunk(pushCtx, output, 0, 1);
  result = pushCtx->myDoc;
  xmlFreeParserCtxt(pushCtx);

  xmlNanoHTTPClose(ctx);
  return result;
}

Listing 3: Die Benutzeroberfläche

Fl_Input    *inputfield;
Fl_Browser  *browser;

void translateCallback(Fl_Widget *,void *) {
  // cerr << "In translate Callback" << "\n";
  // cerr << "Value is " << inputfield->value();
  list translations = performTranslation(inputfield->value(),
						 "de","en");
  browser->clear();
  list::iterator i = translations.begin();
  while (i!=translations.end()) {
    browser->add(*i);
    i++;
  }
}

int startGui() {
    Fl_Window *window = new Fl_Window(140,130);
    inputfield = new Fl_Input(30,5,60,15,"Term:");
    inputfield->labelsize(8);
    inputfield->textsize(8);
    Fl_Button *button = new Fl_Button(95,5,40,15,"Translate");
    //button->labelfont(FL_BOLD);
    button->labelsize(8);
    button->callback(translateCallback);
    browser = new Fl_Browser(5,25,130,100);
    browser->textsize(8);
    window->end();
    window->show();
    return Fl::run();
}
Karl Banke
2004-01-06
Kontakt/Impressum    Über Iternum    Rechtliche Hinweise    Datenschutz   © iternum GmbH 2008