Friday August 25, 2006
JSR 261 (Java API for XML
Web Services Addressing, JAX-WSA) has been operating
under the assumption that it would layer on top of JAX-WS
2.0 (JSR 224). This enabled us to provide WS-Addressing functionality
without delaying the JAX-WS 2.0 EG. The plan was to later make this JSR into a
required component of a future version of the Java web services stack.
After looking at the current state of JSR 261 and listening to the feedback we
received from community, this API seems to provide a rich and powerful API for
WS-Addressing that is more targeted to stack implementers rather than to the end
developer. In order to simplify the programming model for WS-Addressing for JAX-WS
developers, we are revisiting those initial assumptions at the first available
opportunity, namely the upcoming JAX-WS 2.1 Maintenance Release (MR).
We are converging the JSR 261 specification and API with the upcoming
JAX-WS 2.1 MR. Here is a top-level summary of the proposed changes:
The proposals are being discussed with JSR 261 and JSR 224 EG. Since
all the relevant functionality from JSR 261 will be incorporated in the JAX-WS
MR, this would also mean that JSR 261 will be withdrawn from the JCP.
We believe this approach is the right thing to do for the specifications, the
platform and the community. Leave a comment or send your feedback.
Technorati: JSR JCP JAX WSA JAXWS WSAddressing Web Services
Posted by Arun Gupta in webservices | Comments[3]
|
|
|
|
|
Monday August 21, 2006
WSIT install on GlassFish v2 Milestone 1
GlassFish v2
Milestone 1was released last week. The scripts to install WSIT
on this release did
not work because of a change in domain.xml script that was breaking the WSIT
install script (wsit-on-glassfish.xml). I fixed the script and got
a positive
report this morning that the fix is indeed working (always fun!).
So if you are you installing WSIT on GlassFish v2 Milestone 1 and it's not working, then this could be one highly likely reason. The solution is to update your workspace, rebuild and then install on GlassFish. This install script will however not work with GlassFish builds prior to v2 Milestone 1.
Leave a comment if you see any other problem.
Technorati: WSIT GlassFish
Posted by Arun Gupta in webservices | Comments[0]
|
|
|
|
|
Thursday August 17, 2006
WSIT Milestone 1 release has been available for few days now.
Follow 4 simple steps to download the binary release or build from the source and build a secure, reliable and interoperable Web service using the comprehensive tutorial. The samples range from simply adding the two numbers to a price quote service using secure, reliable and brokered trust pattern. All the samples can be installed on GlassFish or Tomcat.
Although the milestone binary does not interoperate with a publicly-available Windows Communication Foundation the current version of the sources does interoperate with the July CTP (runtime and SDK). A WSIT binary release that does interoperate with WCF will be available soon.
Your feedback is very appreciated.
Technorati: WSIT Web Services Web-services WCF Indigo GlassFish
Posted by Arun Gupta in webservices | Comments[0]
|
|
|
|
| As of Aug 14, 2006, java.net community has 262,445 members and growing. Each of these members can check out any of the 3131 projects (as of 8/14) and view the underlying source code, web pages and other content. There are numerous benefits to become a java.net member. I definitely encourage you to join the community but in case you choose not to, you can still check out the the projects using anonymous checkout.
For example, given below is the command to
checkout the WSIT workspace using anonymous account ("guest"
:
cvs -d :pserver:guest-AT-cvs.dev.java-DOT-net:/cvs co wsit/wsit
Check out the WSIT workspace, try it and send us feedback.
Technorati: Community Anonymous CVS WSITPosted by Arun Gupta in webservices | Comments[0]
|
|
|
|
|
Wednesday August 16, 2006
Marathon training: More mental than physical
Practicing for a marathon, to me, is a more mental exercise than physical. I think physically most of us are capable of completing a marathon but training requires motivation, discipline and perseverance. All of these come are mental rather than physical aspects of human psychology. And of these motivation is the MOST important since others follow.
I love running and have been self motivated so far. I found a running buddy few weeks ago but that's only 2-3 days a week. Mostly it's me running alone on rest of the days and all my long runs, for instance, are alone only. I have approx 8 more weeks of intense training and then the taper down starts. Having run slightly over 400 miles in past 11 weeks, I'm hoping to stay motivated all through out.
This article (Getting the MOST Out of Training) accurately summarizes the importance of mental training for a race. Here is a great quote from the article:
"Far too often runners look at mental and physical training separately and this disconnect is usually most evident during training."
Here are some other articles on staying motivated through the training:
George W Bush is
the only president to have run a marathon. He completed 1993 Houston Marathon in
3:44:52 for a pace of about 8:36/mile. Now that's another source of inspiration
for some 
Technorati: Marathon Training Running Motivation
Posted by Arun Gupta in Running | Comments[1]
|
|
|
|
|
Tuesday August 15, 2006
Updated properties available here.
THE FOLLOWING PROPERTIES ARE PROPRIETARY. THEY CAN AND WILL CHANGE.
We are providing this information to help with development and debugging. These properties should not be used in deployments.
WSIT Pipeline Assembler exposes multiple system properties to enable SOAP message logging using DumpPipe. Each property, if it's value is set to true, injects a DumpPipe before or after a WSIT component pipe in the pipeline. This allows the developer to monitor message dumps at several points through out the pipeline, for example before and after encryption.
The legend that derives the property names is given below. A detailed list of property names and their injection points are given in the table further below. Example usages of these properties is given at the end.
Legend:
com.sun.xml.ws.runtime.client prefix indicates client-side
propertiescom.sun.xml.ws.runtime.server prefix indicates server-side
properties.after suffix indicates after (before) on client outbound
(inbound) and server inbound (outbound)..before suffix indicates before (after) on client outbound
(inbound) and server inbound (outbound).
|
Table 1: List of property names and injection points |
|
| Property Name | Location |
| Client-side Properties | |
| com.sun.xml.ws.runtime.client | Right before (after) the message is sent (received) on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.transport | Right before (after) Transport pipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wss.after | Right after (before) SecurityPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wss.before | Right before (after) SecurityPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wsa.after | Right after (before) WsaPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wsa.before | Right before (after) WsaPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wsrm.after | Right after (before) RMPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wsrm.before | Right before (after) RMPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wstx.after | Right after (before) TxPipe on client outbound (inbound) |
| com.sun.xml.ws.runtime.client.wstx.before | Right before (after) TxPipe on client outbound (inbound) |
| Server-side Properties | |
| com.sun.xml.ws.runtime.server | Right after (before) the message is received (sent) on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.transport | Right after (before) Transport pipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wss.before | Right before (after) SecurityPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wss.after | Right after (before) SecurityPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wsa.before | Right before (after) WsaPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wsa.after | Right after (before) WsaPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wsmex.before | Right before (after) MexPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wsmex.after | Right after (before) MexPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wsrm.before | Right before (after) RMPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wsrm.after | Right after (before) RMPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wstx.before | Right before (after) TxPipe on server inbound (outbound) |
| com.sun.xml.ws.runtime.server.wstx.after | Right after (before) TxPipe on server inbound (outbound) |
Example:
-Dcom.sun.xml.ws.runtime.client.wsa.before=true and
-Dcom.sun.xml.ws.runtime.client.wsa.after=true-Dcom.sun.xml.ws.runtime.client=true -Dcom.sun.xml.ws.runtime.server.wsrm.before=true
Notes:
com.sun.xml.ws.runtime.client and com.sun.xml.ws.runtime.client.transport
produce identical message dumps but allows an extensibility point if any
other processing is required after the Transport pipe. This is valid for com.sun.xml.ws.runtime.server
and com.sun.xml.ws.runtime.server.transport.
Technorati: WSIT SOAP Web Services Web-services
Posted by Arun Gupta in webservices | Comments[0]
|
|
|
|
|
Thursday August 10, 2006
wsmonitor (Web Services Monitor): A light-weight SOAP and HTTP Traffic Monitoring tool
This tool, wsmonitor, is a light-weight, easy to use SOAP and HTTP traffic monitoring tool. This tool uses port forwarding to capture the SOAP messages and HTTP headers between a sender and a receiver and displays them nicely formatted in a graphical user interface. The key features are:
The tool is available for free download
at wsmonitor.dev.java.net.
Download,
use and send comments to users-AT-wsmonitor.dev.java.net.
Technorati: Web Services Web-services JAX-WS SOAP HTTP
Posted by Arun Gupta in webservices |
|
|
|
|
|
Monday August 07, 2006
JavaOne 2006 Keynote WSIT Demo
A new sample is added to WSIT samples that shows an enterprise Web service enabling integration both within and across boundaries. This sample demonstrates a price quotation service that provides list price to clients based on the product identifiers. The client makes a request to a Retail Quote Service (RQS) which then communicates with multiple Wholesale Quote Service (WQS) to get the best price and returns that to the client. In the first version of this sample, the client and all the service endpoints (RQS + 2 WQS) are built and deployed using WSIT. A later version of the sample will replace one of the WQS to be built and deployed using Windows Communication Foundation (WCF) and also have a WCF client, in addition to WSIT client, invoking the RQS.
The sample demonstrates secure reliable communication between RQS and two WQS. It also demonstrates secure MTOM between the client and RQS. A picture is worth a thousand pictures and so this graphical representation should help visualize.
This sample was demonstrated in JavaOne 2006 keynote and used as the basis of my JavaOne 2006 technical session (TS-5540). In case, you need more technical details, the StarOffice version of slide has speaker notes and animation.
Instructions to check out the sample
This sample can be checked out using the instructions given here.
These instructions will retrieve WSIT sources along with the sample sources as
both are required to build, run and deploy the sample. The sample exists in wsit/wsit/samples/pricequote
directory. Once checked out, follow the instructions in readme.html in the pricequote
directory to build and deploy the sample on GlassFish.
Technorati: Javaone WSIT Tango GlassFish Indigo WCF Web Services Web-services Interoperability presos
Posted by Arun Gupta in webservices |
|
|
|
|
|
Friday August 04, 2006
WCF Interop: Workaround for Incorrect Action values from WCF client
In my last blog entry, I described how WS-Addressing Action header value is calculated. A WSIT-enabled client/endpoint generates/expects the correct values per W3C Candidate Recommendation. However Microsoft's WCF (Windows Communication Foundation) client does not generate the correct value of Action header in all cases. This blog describes the issue and workaround.
As described in the previous
blog, in the first case, where wsaw:Action is explicitly
associated with wsdl:input message, WCF client generates the
correct Action header value. In the second case where a non-empty soapAction
is specified on wsdl:binding/wsdl:operation, WCF client generates the correct Action header value. In the third case where either soapAction
is not specified or defined with an empty string as it's value, WCF client
generates empty string as Action header instead of the default action. This
causes an interoperability issue between WSIT and WCF starting Jun CTP. Lets understand
this issue and see how it can be worked around.
If the WSDL has either of the following binding sections:
<binding name="..." type="tns:wsaTestPortType">
...
<operation name="echo">
<soap:operation soapAction="">
...
</operation>
</binding>
where soapAction's value is an empty string, or
<binding name="..." type="tns:wsaTestPortType">
...
<operation name="echo">
<soap:operation>
...
</operation>
</binding>
where soapAction is not specified, then WCF client sends empty
string as Action header value.
This is incorrect as W3C WS-Addressing WSDL Binding requires a default action to be generated/expected in this case. But because WSIT-based endpoint expects the correct value according to W3C Candidate Recommendation, there is a conflict and thus WSIT and WCF do not interoperate. Without getting into why there are different interpretations of the spec (probably another blog later), lets see how we can work around this.
WSIT Java-first endpoint, WCF client
If you build your Web service endpoint starting from Java (as opposed to
starting from WSDL), then wsimport
tool will generate a WSDL with soapAction="" in the
SOAP binding. The reason it does that is because JSR
181 (Web Services Metadata for the JavaTM
Platform) says all methods in a SEI (service endpoint interface) are mapped to
WSDL operations. A @WebMethod annotation may be used to customize
the mapping, but in it's absence a default @WebMethod is assumed on
each method. The @WebMethod annotation has a member with name
"action" that determines the value of soapAction for SOAP
bindings. This member has a default value of "" (empty string). And
thus, in this case, any WSDL generated by WSIT, either at runtime or using
wsimport tool, where SEI does not have @WebMethod.action set to any
non-empty-string value, has soapAction="" in the SOAP
binding section.
So if your SEI looks like:
@WebService
public class AddNumbersImpl {
public int addNumbers(int number1, int number2) {
...
}
}
The generated SOAP binding will look like:
<operation name="addNumbers"> <soap:operation soapAction="" /> ... </operation>
As explained above, WSIT and WCF do not interoperate for such
a WSDL. The default value (empty string) of soapAction can easily
be overridden by adding a @WebMethod annotation on your method as
shown below. So
if your SEI looks like:
@WebService
public class AddNumbersImpl {
@WebMethod(action="addNumbers"
public int addNumbers(int number1, int number2) {
...
}
}
The generated SOAP binding in this case looks like:
<operation name="addNumbers"> <soap:operation soapAction="addNumbers" /> ... </operation>
WCF client will generate "addNumbers" as the Action header and WSIT endpoint will accept it as a valid value.
WSIT WSDL-first endpoint, WCF client
If you are starting from WSDL, then you can either explicitly specify wsaw:Action
attribute on the input message, as shown below:
<portType name="AddNumbersImpl">
<operation name="addNumbers">
<input message="tns:addNumbers" wsaw:Action="http://example.org/action/echoIn"/>
<output message="tns:addNumbersResponse"/>
</operation>
</portType>
Note, this is only required to be changed for input messages as WSIT endpoint generates the correct action on fault and output messages going back to WCF client.
Alternatively you can change, or add if missing, soapAction in
the binding section, as shown below:
<operation name="addNumbers"> <soap:operation soapAction="addNumbers" /> ... </operation>
As a convenience, you can use the operation
name as the value of either wsaw:Action or soapAction since that is guaranteed to be unique.
WCF Endpoint, WSIT client
A WCF endpoint always generates explicit wsaw:Action for each
message in the portType and exactly same value of soapAction.
WSIT client is interoperable with WCF endpoints out of the box in this case.
Hopefully WCF will be fixed in the upcoming CTP and behave as per W3C
standards. Then this workaround will not be required and life will
be simpler again 
Posted by Arun Gupta in webservices |
|
|
|
|
|
Thursday August 03, 2006
How WS-Addressing Action header is calculated ?
W3C WS-Addressing WSDL Binding defines the sequence to follow in order to calculate the value of Action header to be sent in a client outbound SOAP message or expected in a server inbound SOAP message. The sequence is explained below:
wsaw:Action is explicitly
associated with wsdl:input message, then use that. For
example,<portType name="wsaTestPortType"> <operation name="echo"> <input message="service:wsaEchoInMessage" wsaw:Action="http://example.org/action/echoIn"/> <output message="service:wsaEchoOutMessage" wsaw:Action="http://example.org/action/echoOut"/> </operation> </portType>The expected (or generated) Action in this case is "http://example.org/action/echoIn".
wsaw:Action is not specified on the wsdl:input
message and non-empty soapAction is specified on wsdl:binding/wsdl:operation,
then use that. For example,<wsdl:binding name="wsaTestSoap11Binding" type="service:wsaTestPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="echo"> <soap:operation style="document" soapAction="http://example.org/soapaction/echoIn"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation>The expected (or generated) Action in this case is "http://example.org/soapaction/echoIn".
wsaw:Action is not specified on the wsdl:input
message and either soapAction is not specified or specified
with empty string as it's value, then use the default
action pattern. For example,<definitions targetNamespace="http://example.org/wsaTestService" ...> ... <portType name="wsaTestPortType"> <operation name="echo"> <input message="service:wsaEchoInMessage"/> <output message="service:wsaEchoOutMessage"/> </operation> </portType> ... <binding name="..." type="tns:wsaTestPortType"> <soap:binding style="document" transport="..."/> <operation name="echo"> <soap:operation soapAction=""> ... </operation> </binding> </definitions>In the binding above, soapAction's value is an empty string. The binding could alternatively be defined as (no soapAction):
<binding name="..." type="tns:wsaTestPortType"> <soap:binding style="document" transport="..."> <operation name="echo"> <soap:operation> ... </operation> </binding>The expected (or generated) Action in either case is "http://example.org/wsaTestService/wsaTestPortType/echoRequest".
In all the above cases, WSIT-enabled endpoint generates the correct Action header on the client outbound message and expects the same on the server inbound.
Download WSIT and get started on standards compliant and interoperable Web services.
Technorati: WSAddressing W3C WSIT Web Services Web-servicesPosted by Arun Gupta in webservices |
|
|
|
|
|
Tuesday August 01, 2006
I've made a new friend on my running trail couple of weeks ago and we were talking about breathing styles. After 9 weeks of marathon training, I realized I've not read much on breathing so here is my learning over the past few days. There are a few terms associated with breathing:
All these terms are nicely explained here.
For the first couple of miles, I tend to breath through nose only but then I switch to mouth and nose inhale/exhale pattern. I need to practice on belly breathing since I realize I'm a chest breather and runs out of breath when I run faster than my regular pace for few miles. I've not tried calculating my rhythm but I think it's mostly 2/1 during fast runs and 2/2 during normal pace.
Here are a few articles that I found helpful:
And here are my lessons on breathing:
Technorati: Breathing Finess Running Marathon
Posted by Arun Gupta in Running |
|
|
|
|
|
Today's Page Hits: 3147
Total # blog entries: 1002