blob: d9d3eb38acdf491799558e3120ddb75b9137f9c4 [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="../skin/tigris.css" type="text/css">
<link rel="stylesheet" href="../skin/mysite.css" type="text/css">
<link rel="stylesheet" href="../skin/site.css" type="text/css">
<link media="print" rel="stylesheet" href="../skin/print.css" type="text/css">
<title>WebServices - Axis</title>
</head>
<body bgcolor="white" class="composite">
<div id="banner">
<table width="100%" cellpadding="8" cellspacing="0" summary="banner" border="0">
<tbody>
<tr>
<td align="left">
<div class="groupLogo">
<a href="http://ws.apache.org/"><img border="0" class="logoImage" alt="The Apache WebServices Project" src="../images/project-logo.jpg"></a>
</div>
</td><td align="right">
<div class="projectLogo">
<a href="http://ws.apache.org/axis/"><img border="0" class="logoImage" alt="The Apache Axis Project" src="../images/axis.jpg"></a>
</div>
</td><td valign="top" rowspan="2" align="right" class="search">
<form target="_blank" action="http://www.google.co.jp/search" method="get">
<table summary="search" border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#a5b6c6" colspan="3"><img height="10" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td colspan="3"><img height="8" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td nowrap="nowrap"><input value="ws.apache.org" name="sitesearch" type="hidden"><input value="ja" name="hl" type="hidden"><input value="UTF-8" name="ie" type="hidden"><input size="10" name="q" id="query" type="text"><img height="1" width="5" alt="" src="../skin/images/spacer.gif" class="spacer"><input name="Search" value="検索" type="submit">
<br>WS を検索
</td><td><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td colspan="3"><img height="7" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td>
</tr>
<tr>
<td class="bottom-left-thick"></td><td bgcolor="#a5b6c6"><img height="1" width="1" alt="" src="../skin/images/spacer.gif" class="spacer"></td><td class="bottom-right-thick"></td>
</tr>
</table>
</form>
</td>
</tr>
</tbody>
</table>
</div>
<table width="100%" cellpadding="0" cellspacing="0" border="0" summary="nav" id="breadcrumbs">
<tbody>
<tr class="status">
<td><a href="http://www.apache.org/">Apache</a> | <a href="http://ws.apache.org/">WS</a><a href=""></a></td><td id="tabs">
<div class="tab">
<span class="selectedTab"><a class="base-selected" href="../index.html">WebServices-Axis</a></span>
</div>
</td>
</tr>
</tbody>
</table>
<table id="main" width="100%" cellpadding="8" cellspacing="0" summary="" border="0">
<tbody>
<tr valign="top">
<td id="leftcol">
<div id="navcolumn">
<div class="menuBar">
<div class="menu">
<span class="menuLabel">Axis</span>
<div class="menuItem">
<a href="../index.html">はじめに</a>
</div>
<div class="menuItem">
<a href="../news.html">お知らせ</a>
</div>
<div class="menuItem">
<a href="http://wiki.apache.org/ws/ja/axis">FAQ/Wiki</a>
</div>
<div class="menu">
<span class="menuLabel">活動に参加</span>
<div class="menuItem">
<a href="../overview.html">概要</a>
</div>
<div class="menuItem">
<a href="../cvs.html">CVS リポジトリ</a>
</div>
<div class="menuItem">
<a href="../mail.html">メーリングリスト</a>
</div>
<div class="menuItem">
<a href="../ref.html">リファレンスライブラリ</a>
</div>
<div class="menuItem">
<a href="../bugs.html">バグ</a>
</div>
<div class="menuItem">
<a href="../howtobuild.html">サイト構築方法</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">Axis (Java)</span>
<div class="menuItem">
<a href="../java/index.html">ドキュメント</a>
</div>
<div class="menuItem">
<a href="../java/install.html">インストール</a>
</div>
<div class="menuItem">
<a href="../java/user-guide.html">ユーザガイド</a>
</div>
<div class="menuItem">
<a href="../java/developers-guide.html">開発者ガイド</a>
</div>
<div class="menuItem">
<a href="../java/integration-guide.html">統合ガイド</a>
</div>
<div class="menuItem">
<a href="../java/architecture-guide.html">アーキテクチャガイド</a>
</div>
<div class="menuItem">
<a href="../java/reference.html">リファレンスガイド</a>
</div>
<div class="menuItem">
<a href="../java/reading.html">読書ガイド</a>
</div>
<div class="menuItem">
<a href="../java/requirements.html">要件</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">Axis (C++)</span>
<div class="menuItem">
<a href="../cpp/index.html">Axis C++ 最新版</a>
</div>
<div class="menuItem">
<a href="../cpp/documentation.html">ドキュメント</a>
</div>
<div class="menuItem">
<a href="../cpp/download.html">ダウンロード</a>
</div>
<div class="menuItem">
<a href="http://wiki.apache.org/ws/FrontPage/AxisCPP">Wiki ページ [英語]</a>
</div>
<div class="menuItem">
<a href="../cpp/who.html">メンバ紹介</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">ダウンロード</span>
<div class="menuItem">
<a href="../releases.html">リリース</a>
</div>
<div class="menuItem">
<a href="../interim.html">暫定版</a>
</div>
<div class="menuItem">
<a href="http://cvs.apache.org/viewcvs/ws-axis/">ソースコード [英語]</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">翻訳</span>
<div class="menuItem">
<a href="http://ws.apache.org/axis/jp/">日本語</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">関連プロジェクト</span>
<div class="menuItem">
<a href="http://ws.apache.org/wsif/">WSIF [英語]</a>
</div>
<div class="menuItem">
<a href="http://cvs.apache.org/viewcvs/*checkout*/ws-wsil/java/README.htm">WSIL [英語]</a>
</div>
<div class="menuItem">
<a href="http://www-124.ibm.com/developerworks/projects/wsdl4j/">WSDL4J [英語]</a>
</div>
<div class="menuItem">
<a href="http://www.uddi4j.org/">UDDI4J [英語]</a>
</div>
</div>
<div class="menu">
<span class="menuLabel">その他</span>
<div class="menuItem">
<a href="../who.html">メンバ紹介</a>
</div>
<div class="menuItem">
<a href="../contact.html">連絡先</a>
</div>
<div class="menuItem">
<a href="../legal.html">法関連</a>
</div>
<div class="menuItem">
<a href="../docs.html">メモ/ドキュメント</a>
</div>
</div>
</div>
</div>
</div>
</td><td>
<div id="bodycol">
<div class="app">
<div align="center">
<h1>WebServices - Axis</h1>
</div>
<div class="h3">
<div class="h3">
<h3>WebServices - Axis - </h3>
</div>
<p>
<h2>Notes from Axis Face-to-Face Meeting at Allaire, Newton, MA. </h2>
<h3>Date: 28 Feb 2001</h3>
<b>Attendees:</b>
<ul>
<li>Glen Daniels, Allaire. Host</li>
<li>Doug Davis, IBM Raleigh</li>
<li>Steve Graham, IBM Raleigh</li>
<li>Jim Stearns, HP Redmond</li>
<li>Jacek Kopecky, Idoox, Prague</li>
<li>Waqar Sadiq, Vitria</li>
<li>James Snell, IBM Fresno (by phone)</li>
<li>Stuart Williams, HP Bristol</li>
</ul>
<p>Glen expressed some frustration at the lack of good tools that Apache provides for project management. The mailing list archives kind of bite, etc. SourceForge seems to have good tools for scheduling / task management / collaboration...</p>
<p>
<i><b>ACTION ITEM : Glen will email Sam and ask about the possibility of "co-locating" the project with SourceForge? Investigating other tools and solutions?</b></i>
</p>
<p>Waquar Sadiq from Vitria, a new member of the team, volunteered to be Project Manager for Axis! (applause applause)</p>
<p>Steve presented a short Powerpoint presentation to frame the meeting.</p>
Axis 1.0 will be a serious product. As such, it will have:
<ul>
<li>product-level code</li>
<li>product-level testing</li>
<li>product-level doc + examples</li>
<li>product-level performance</li>
</ul>
<h4>Goals for the 1.0 release:</h4>
<ul>
<li>Full SOAP 1.1 implementation</li>
<ul>
<li>Interoperability testing/discussions to answer ambiguities</li>
<li>Intermediary implementation must be in 1.0 release</li>
</ul>
<li>Relative priority (Glen)</li>
<ul>
<li>Full implementation of 1.1</li>
<li>Customer requirements</li>
<li>Where xmlp is headed (Glen, Waqar, Jacek are all on XML Protocol group)</li>
</ul>
<li>Fast (need to do the streaming parsing)</li>
<li>Pluggable</li>
</ul>
<p>Support for requestor/provider/intermediary (one-way, initiated by either side); client notification.
Support for request/response and the other 3 transmission primitives from WSDL</p>
<p>Glen : Don't think we should make the axis-user list until 0.9 or beta 1.0...</p>
<p>Issue : Migrating from Apache SOAP to Axis - should be easy, but how easy?</p>
<p>Waqar: We should be tracking ebXML as well as XMLP...</p>
<h5>Testing/Process-related discussion...</h5>
<ul>
<li>coding standards</li>
<li>test-case centric development</li>
<li>regression test cases</li>
<li>scenario-centric design/architecture</li>
<li>Unit tests are good, but not sufficient</li>
<li>Is JUnit too oriented towards "white box" unit testing? Jim says they're using it as a framework at HP for both unit and functional.</li>
<li>Three types of testing - unit, functional integration, interop</li>
<li>conformance testing; maybe use the userland validator? leverage external efforts? Microsoft "bakeoff"?</li>
<li>interop testing with big players (.NET) is crucial!</li>
<li>Requiring some level of testing implementation from commmitters is key. The question is how to best codify this in a strong but not draconian way</li>
</ul>
The plan for the rest of today:
<ul>
<li>Walk through requirements doc</li>
<li>Generate scenarios</li>
<li>walk through scenarios, updating requirements</li>
</ul>
<h3>Requirements discussion</h3>
<ul>
<li>lose
1.1 and 1.1.1: architecture is settling not overdoing use of handlers</li>
<li>server-initiated
solicit/response (in WSDL spec)</li>
<li>4
options (synch/asynch, client-initiated vs server-initiated)</li>
<ul type="circle">
<li>requestor/provider
</li>
<li>Facets
(Steve):</li>
<ul type="square">
<li>Who
initiates (server or client)</li>
<li>1-way/2-way</li>
<li>asynch/synch</li>
<li>(1-way
synch makes no sense, so 7 options)</li>
<li>2-way
asynch?</li>
</ul>
<li>Glen:
what is underlying protocol doesn't support synchronous (such as smtp)?</li>
<li>Waqar:
what about async request expecting ack, vs. one not expecting one?</li>
<li>Is this (a)synchronous at the <b>API</b> level, or the <b>transport</b> level?</li>
<li>Call
this topic "message exchange patterns"</li>
<li>"Synchronous"
== blocking</li>
<li>everything is initiated
by a client of the axis engine, which can be on requestor,
intermediary, or provider</li>
<li>Q:
in a one-way WSDL message, can you specify a fault? James: yes, but spec doesn't say what
to do with the fault. Stuart:
thinks treatment of fault is above the message layer.</li>
<li>WSDL
1.1 one-way only has input, but doesn't have output or fault (Steve
brought up)</li>
<li>Stuart:
Service in wsdl is more like operation.</li>
</ul>
<li>What
can we dispatch by?</li>
<ul type="circle">
<li>Dispatch
by transport URL</li>
<li>Dispatch
by HTTP SOAPAction</li>
<li>Dispatch
by QName of first body entry</li>
<li>Dispatch,
using custom handler, by any information available)</li>
</ul>
<li>How
many RPC's per message, and where</li>
<ul type="circle">
<li>Axis
will NOT support a RPC invocation specified in a header</li>
<li>Axis
will support only one RPC invocation per body entry.</li>
<li>Suggestion to remove "first" from body child, 6-2 against.</li>
</ul>
<li>XML
Prototocol - Status</li>
<ul type="circle">
<li>Something
will be published in April issues with SOAP 1.1 that need to be fixed</li>
<li>July-ish:
first XML protocol spec soap 1.1 with fixes to some issues</li>
<li>November:
proposed recommendation</li>
<li>December:
1.0 spec recommendation</li>
</ul>
<li>Intermediaries:
Glen: TRLSoap has implemented them to some extent.</li>
<ul type="circle">
<li>Steve:
state of the art is Single-hop fake.</li>
</ul>
<li>SOAP
Encoding Support</li>
<ul type="circle">
<li>We
use for RPC, and yet won't require xsi:type (<b>type info can come from a
reference to a schema outside the message</b>) </li>
</ul>
<li>Performance</li>
<ul type="circle">
<li>Action
Item: need to research alternative benchmarks for SOAP performance (Jim
volunteered) and for interoperability.</li>
<ul type="square">
<li>UI</li>
</ul>
<li>Glen
was willing to prioritize "not significantly slower" as want but not
required. Jim advocated that we
need at release, and Steve agreed.</li>
</ul>
</ul>
<p>Discussion of metrics - some arguments as to whether it's a Handler or an API. Well, logging is an API, maybe metrics are as well...</p>
<p>
<i><b>ACTION ITEM: Glen will investigate JRun's metrics API and share with the group.</b></i>
</p>
<p>We need to have some kind of "Required header" parameter either in the WSDD or as an API in the Handler itself if we want "pre-flight" knowledge of required headers (and perhaps a default fault response)...</p>
<p>Big discussion about header handling - jukebox handler, there were worries that it's a security risk. Glen notes that the handlers that are in the jukebox's registry are limited, just like the handlers on a chain, you just don't need to call them all in order...doesn't seem like a risk.</p>
<hr>
<h2>Day 2</h2>
<h3>1 March 2001</h3>
<b>Attendees:</b>
<ul>
<li>Glen</li>
<li>Steve</li>
<li>Doug</li>
<li>Jacek</li>
<li>Jim</li>
</ul>
Agenda (wish list):
<ul>
<li>Finish revision of requirements</li>
<li>Develop rough use case scenarios</li>
<li>Revisit requirements after use cases</li>
<li>Glen: supplier pattern</li>
<li>Steve: WSDD</li>
<li>All: streaming parser</li>
</ul>
<p>Code on BOTH client and Server looks like this?</p>
<span class="codefrag">
Handler handler = Axis.getHandler(name1);
MessageContext mc = new MessageContext();
// set up MC properties, including target!
handler.invoke(mc);
</span>
<h3>Requirements review, continued</h3>
<ul>
<li>Service
Description</li>
<ul type="circle">
<li>Interaction
between WSDL and WSDD. Each can
be used to create the other?</li>
<li>Steve:
hard to generate wsdl for document (rather than rpc).</li>
<li>Jacek:
treat the WSDD as the master</li>
<li>Jim:
no, WSDL is the standard, WSDD is just our team's proposal.</li>
<li>Glen:
WSDD may not contain all the info needed to generate a WSDL file</li>
<li>WSDD
can contain either (1) pointer to existing WSDL file or (2) enough data
(possibly, but not certainly) to generate a WSDL from scratch, or (3)
enough data which in combination with existing WSDL, to generate an
updated WSDL.</li>
<li>WSDD
should provide cross-checking (WSDL not consistent with WSDD)</li>
<li>(I
missed some issues here: there's flexibility here that makes this
difficult e.g. what serializer?)</li>
<li>DISCO
on Axis root added.</li>
<li>Client-side</li>
<ul type="square">
<li>Default
will be simple case: generate a proxy</li>
<li>But
WSDL can require a digital signature header want to be able to have
WSDD on client side to deploy a chain that includes a digital signature
generator.</li>
<li>Doug:
where to get digital signature handler?</li>
<ul>
<li>Steve/Glen: wsdl can include pointer to handler.</li>
<li>Glen: there are extension elements in
WSDL.</li>
</ul>
<li>Added
as wish proxy generation from wsdl (and wsdd). Stated: java, possibly c++</li>
</ul>
</ul>
<li>Platform</li>
<ul type="circle">
<li>Surprising
amount of interest in doing C++ implementation (Glen, Steve, Jacek) for
performance, but was listed as wish [P5]. Background: James Snell added this, including using local
services (e.g. COM).</li>
</ul>
<li>Transports
</li>
<ul type="circle">
<li>SMTP
sender and POP3 poller. Assume external mail server
available. This is what
Apache SOAP 2 does.</li>
<li>Glen:
do we want to provide a generic (fast) transport between handlers?</li>
<ul type="square">
<li>Transport
Sender</li>
<li>Glen:
all transport-specific chains end in a router. Oops, maybe not; if no router at end, look at target
service field and if not null, invoke that service; then look <i>again</i> to see if target service is not null. Loop until null.</li>
<li>Order</li>
<ul>
<li>Transport
chain no router</li>
<li>Global
chain no router</li>
</ul>
</ul>
<li>
<i>(Lots
of discussion on axis engine and dispatching)</i>
</li>
<li>Jim
asked whether any of these transport cases could be punted these
asymmetric cases of HTTP request asking for SMTP response. Glen, Steve, Jacek all said no, we
need to support all of these.</li>
<li>(Discussion
over how to send asymmetric response to request sent over one-way
protocol: callback, or configure in a Transport Sender and if return
message is non-null, send and then null out return message so it. Callback or null-out message? Steve and Jacek: putting up to
committer vote would be a big morass? Jacek: ok, grumble, fallback.</li>
<li>Doug:
are we going to support multi-cast? Jacek: why not? Jim: why?</li>
<li>Things
that Transport Listener must call and set:</li>
<ul type="square">
<li>Static
handler Axis.getHandler(String tlID);</li>
<li>Request
chain bag ID</li>
<li>Response
chain bag ID</li>
<li>Target
bad ID</li>
<li>Transport
Sender</li>
</ul>
<li>Jacek
prefers many small registries over fewer larger ones. Glen said that smaller hash tables
perform lookups faster.</li>
<ul type="square">
<li>Services (deployed handlers)</li>
<li>Handlers
(available handlers)</li>
<li>(After
much discussion, settled on 2)</li>
</ul>
</ul>
<li>Data
Encoding</li>
<ul type="circle">
<li>Steve:
(de)serialization only makes sense for RPC, not document handling.</li>
<li>Jacek
would love to see general serialization at 1.0 release.</li>
<li>Serialization
may occur anywhere, not in one fixed place in Axis architecture.</li>
</ul>
</ul>
<h2>Streaming Parser Discussion</h2>
<p>For reading in input, we use the PDOM model - <br>
We have either a SAX event source or a pull parser underneath something that looks like JDOM.<br>
In the SAX case:<br>
<ol>
<li>a thread starts processing the SAX event stream, and blocks until told to continue.</li>
<li>When people ask for a particular element (i.e. getNextChild()), the parser thread unblocks, and runs the SAX event stream through, building up the JDOM object model, until it gets to the desired element/attribute/etc. Then it blocks again, and returns control to the getWhatever() API.</li>
</ol>
</p>
Sot the Message API gets: (or maybe JDOM gets the latter three)<br>
<br>
<span class="codefrag">
getAsElement()
parseAsSAX(SAXHandler)
getAsXMLStream()
getAsByteStream()
</span>
<p>Does getAsByteStream() terminate the option of doing anything else afterwards?</p>
How do we test this? Metrics:
<ol>
<li>Use PDOM, read first few elements, then stream rest to file</li>
<li>Use JDOM, process first few elements, then write to file</li>
<li>Stream bytes from file to file</li>
</ol>
<p>do this for small (1K), medium (50K), and large (10 meg) files</p>
<p>On the output side, we should be able to setAsStream, and hand the element a stream which will eventually be pulled for content when someone does a getAsStream() on the whole doc. This means a proxy stream which clunks its way down the message, draining streams it encounters along the way.</p>
<p>Open question - is it easy/efficient to get a JDOM Element as a stream/string, as opposed to a whole doc? Looks like Element.getSerializedForm() isn't implemented yet?</p>
<p>Pull parser discussion - if possible, a real pull parser would avoid the multi-threading, and probably perform better than the SAX-based PDOM model. We'll look into this!</p>
<hr>
<p>Project Participants:</p>
<ul>
<li>PM: Waqar
(Vitria)</li>
<li>Coders:
Doug, Steve, Glen, Jacek, Jim, James, Yuichi, Ryoh</li>
<ul type="circle">
<li>Glen
and Doug can work on this a lot</li>
<li>James
doing stuff</li>
<li>Steve
doesn't have much time for coding</li>
</ul>
<li>Others:
George, Chris Nelson, Kevin Mitchell, Sanjiva, Matt, </li>
<li>Sam
for political and process stuff.</li>
<li>Connection
to XML Protocol: Glen, Waqar, Jacek</li>
<ul type="circle">
<li>Stuart
for Conversations</li>
</ul>
<li>Connection
to Apache 2.x: Doug, Glen, Sanjiva</li>
<li>(Glen:
SOAP 2.1 documentation is bad, could impact us less credibility).</li>
</ul>
</p>
<div id="pdf" align="right">
<a href="F2F-2.pdf"><img alt="PDF" src="../skin/images/pdfdoc.gif" class="skin"><br>
PDF</a>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div id="footer">
<table summary="footer" cellspacing="0" cellpadding="4" width="100%" border="0">
<tbody>
<tr>
<td colspan="2">
<div align="center">
<div class="copyright">
Copyright &copy; 2000-2005&nbsp;The Apache Software Foundation. All rights reserved.
</div>
</div>
</td>
</tr>
<tr>
<td align="left"></td><td align="right">
<div align="right">
<div class="credit"></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>