YOUR FEEDBACK
sahil wrote: any one please help regarding this?
AJAXWorld RIA Conference
October 20-22 San Jose, CA
Register Today and SAVE !..

2008 East
DIAMOND SPONSOR:
Data Direct
Frontiers in Data Access: The Coming Wave in Data Services
PLATINUM SPONSORS:
Red Hat
The Opening of Virtualization
Intel
Virtualization – Path to Predictive Enterprise
Green Hills
IT Security in a Hostile World
JBoss / freedom oss
Practical SOA Approach
GOLD SPONSORS:
Software AG
The Art & Science of SOA: How Governance Enables Adoption
PlateSpin
Effective Planning for Virtual Infrastructure Growth
Fujitsu
Automated Business Process Discovery & Virtualization Service
Ceedo
Workspace Virtualization
Click For 2007 West
Event Webcasts

2008 East
PLATINUM SPONSORS:
Appcelerator
Think Fast: Accelerate AJAX Development with Appcelerator
GOLD SPONSORS:
DreamFace Interactive
The Ultimate Framework for Creating Personalized Web 2.0 Mashups
ICEsoft
AJAX and Social Computing for the Enterprise
Kaazing
Enterprise Comet: Real–Time, Real–Time, or Real–Time Web 2.0?
Nexaweb
Now Playing: Desktop Apps in the Browser!
Sun
jMaki as an AJAX Mashup Framework
POWER PANELS:
The Business Value
of RIAs
What Lies Beyond AJAX?
KEYNOTES:
Douglas Crockford
Can We Fix the Web?
Anthony Franco
2008: The Year of the RIA
Click For 2007 Event Webcasts

SYS-CON.TV
TOP THREE LINKS YOU MUST CLICK ON


Integrating an ASP.NET Application with J2EE PART 2
Platform interoperability

The application then loads the XML string passed from the Web Service into the DataSet via the ReadXml method.


//Get exception detail xml string
string xmlString = ex.Detail.OuterXml;

//Read the xml string into a StringReader object
StringReader stringReader = new StringReader(xmlString);

//Read the StringReader into the XmlReader object
XmlReader xmlReader = new XmlTextReader(stringReader);

//Read the Xml into the DataSet
dsError.ReadXml(xmlReader, XmlReadMode.IgnoreSchema);
The client error message is then accessible from the DataSet and is displayed in the txtSOAPClientMessage text.

// Create an instance of DataView object
dataView = new DataView();

// Specify the table
dataView.Table = dsError.Tables["Error"];

// Get the first row
DataRow dsErrorRow = dataView.Table.Rows[0];

// Get the relevant Error message
message = dsErrorRow["ClientErrorMessage"].ToString();
txtSOAPClientMessage.Text = message;
The complete code for this processing is shown in Listing 5.

There's one additional issue to consider when processing a SoapException thrown via a WebLogic Web Service. If you choose to expose a Session EJB as a Web Service, there's an additional caveat. Runtime (non-checked) exceptions thrown in Session EJBs are packaged by the EJBContainer as an EJBException before being thrown to the caller. This is mandated by the J2EE specification. EJBExceptions in a Web Service are automatically processed by WebLogic and wrapped using default SoapException processing. It doesn't let you override this processing to generate a custom SoapException. It's one of the reasons we used a business delegate layer (see Figure 1). It lets us throw our exception as a custom application exception in WebLogic, and in the business delegate class (which is a simple Java class), it allows us to catch the application exception, generate, and throw a custom SoapException.

Uploading binary information
In our application we needed to let users upload binary images to our site. The images then had to be available to other users of the application. The images contained confidential information for our clients, so we needed to ensure that the images couldn't be viewed easily in the Web application by manipulating the URL. As part of out business analysis for the site, we viewed the sites of some of our client's competitors and were surprised to see that we could often guess the names (and sequence numbers) of the images and could see information that was private and confidential.

So we stored the images on our WebLogic server (on the file system) and streamed the binary contents of the file via a Web Service. The client, an ASP.NET Web page, would gather the file's binary contents and stream them to the client browser.

The first issue we needed to resolve was the technology we were going to use to send the binary information via Web Services. There were two different alternatives: send the data via a binary data type or via the SOAP With Attachments protocol. We did some research and found an interesting paper written by several Microsoft and BEA architects at http://msdn.microsoft.com/library/default.asp?url=/ library/en-us/dnwebsrv/html/infoset_whitepaper.asp. The paper advocates encoding the data via a binary data type such as xs:base64binary or xs:hexBinary because of security issues with out-of-band attachment data as well as the fact that SOAP Messages With Attachments don't conform to the Basic Profile 1.0 (BP) published by the Web Services Interoperability Organization (WS-I). That raised some potential performance issues with using text representations of binary code, but, since we weren't transferring a lot of binary data, optimal performance wasn't the most important issue. Based on that white paper, especially given the authors and the equal representation of Microsoft and BEA, we decided to use binary data types to send image data in our Web Service rather than using the SOAP With Attachments API. Once we established our approach, we needed to map out the steps. We would use the .NET upload HTML control to send the binary data to the Web server. Once the user uploaded the image to the Web server, the application needed to do the following in the ASP.NET application:

  1. Check that the image extension was valid.
  2. Define a temporary file name for the image and call the fileInput.PostedFile.SaveAs method to save the file to a temporary area on the Web server.
  3. Check the size of the image to make sure it wasn't beyond the limit allowed.
  4. Convert the image to a byte array.
  5. Call the Web Service passing the byte array.
  6. Delete the temporary file.
Listing 6 shows the ASP.NET code that did these steps. It's pretty straightforward so I won't go through it in detail.

The Web Service code in BEA's WebLogic needed to get the byte array, create a file on the file system from it, and store the name of the image in the database so the image could be viewed in the future.

Listing 7 shows the Java code that did these steps. In the example we simply stored the file on the application server's file system. In our production application, we added a couple of additional steps to obfuscate the file name and to store the files in a hierarchical structure on the file system (rather than in the same directory) to make file system navigation and lookup more efficient.

About Blair Taylor
Blair Taylor is president of JustWebSolutions.com, a Canadian company specializing in the architecture and development of distributed systems. Blair has authored several publications covering client-server and distributed technologies and is certified in both Java and .NET technologies. Blair can be reached via e-mail at feedback@justwebsolutions.com or at www.justwebsolutions.com.

YOUR FEEDBACK
mo wrote: Good article. I completely support the article approach when dealing with simple text based services. Web services is a satisfying solution . Unfortunately , I believe that binary data shouldn't be handled using Web services. It's just not up to it and the writer have proved it when dealing with .NET exceptions. There are better solutions for such cases. I can think of at least one solution that converts .NET binary into pure Java binary: http://dev.mainsoft.com/ but I'm sure there are more.
BEA WEBLOGIC LATEST STORIES
Since its emergence, Web Service technology has gone a long way towards perfecting itself and finding its right application in the real world. With the maturity of the specifications, Web Service technology, with its power of interoperability, is now the major enabling technology of SO...
Join Scott Guthrie as he discusses Microsoft’s commitment to web standards development, Rich Internet Applications and how Microsoft is contributing to help move the web forward. Join Adobe’s Kevin Lynch as he demonstrates how Flash and HTML come together to make the most engaging,...
Virtualization has become a critical part of Enterprise IT strategy. Why and how has it become one of the most important change agents in our industry? To answer these questions I had the good fortune recently to be able to speak to a select group of top IT industry executives who join...
Watching VMware stock and its market cap spike since it IPO'd must have had Red Hat positively pea green with envyWatching VMware stock and its market cap spike since it IPO'd must have had Red Hat positively pea green with envy - so green in fact that it's gonna try taking VMware on b...
A standard from OASIS called Web Services for Remote Portlets (WSRP) is used so portlets can be decoupled from a portal. In part one (JDJ, Volume. 13, issue 3) of this article, we introduced the relevant standards and specifications and then demonstrated WSRP's capabilities by consumin...
SYS-CON's upcoming '3rd International Virtualization Conference & Expo' faculty includes such distinguished speakers as: Al Aghili (Managed Methods), Alan Chhabra (Egenera), Andi Mann (Enterprise Management Associates), Andrew Conte (APC), Andy Astor (EnterpriseDB), Ariel Cohen (Xsigo ...
SUBSCRIBE TO THE WORLD'S MOST POWERFUL NEWSLETTERS
SUBSCRIBE TO OUR RSS FEEDS & GET YOUR SYS-CON NEWS LIVE!
Click to Add our RSS Feeds to the Service of Your Choice:
Google Reader or Homepage Add to My Yahoo! Subscribe with Bloglines Subscribe in NewsGator Online
myFeedster Add to My AOL Subscribe in Rojo Add 'Hugg' to Newsburst from CNET News.com Kinja Digest View Additional SYS-CON Feeds
Publish Your Article! Please send it to editorial(at)sys-con.com!

Advertise on this site! Contact advertising(at)sys-con.com! 201 802-3021

SYS-CON FEATURED WHITEPAPERS

ADS BY GOOGLE
BREAKING NEWS FROM THE WIRES

Sun Microsystems, Inc. (NASDAQ:JAVA) today announced the new Sun SPARC(R) Enterpris...