Errata

Java Web Services: Up and Running

Errata for Java Web Services: Up and Running

Submit your own errata for this product.

The errata list is a list of errors and their corrections that were found after the product was released. If the error was corrected in a later version or reprint the date of the correction will be displayed in the column titled "Date Corrected".

The following errata were submitted by our customers and approved as valid errors by the author or editor.

Color key: Serious technical mistake Minor technical mistake Language or formatting error Typo Question Note Update

Version Location Description Submitted By Date submitted Date corrected
Printed
Page 6
Last line of comments on the page

The word applicatation (vs. application) is misspelled in the last line beginning with "Once the..."

Note from the Author or Editor:
Last line on page 6:

The word "applicatation" should be "application"

Frank Hellwig  Oct 14, 2009 
Printed
Page 12
2nd bullet

MIME = Multipurpose Internet Mail Extensions

Note from the Author or Editor:
Page 12, 2nd bullet: the definition of MIME in the bullet is wrong. The
current text is

...with a MIME (Multiple Internet Mail Extension)...

It should be changed to

...with a MIME (Multipurpose Internet Mail Extensions)...

C.P. Byrman  May 25, 2009  Sep 01, 2009
Printed
Page 14
1st paragraph

The class QName belongs to java[b]x[/b].xml.namespace, not java.xml.namespace.

Note from the Author or Editor:
On p. 14, 1st paragraph, the fully qualified name should be

javax.xml.namespace.QName

instead of

java.xml.namespace.QName

Ralf Wahner  Aug 28, 2010 
Printed
Page 14
2nd paragraph in the statement of code. In code and paragraph.

Appearing twice.

1st, in the line of code:

TimeServer port = service.getPort(TimeServer.class);

is referred to in the preceding line as the statement of interest. However; the example to which this line is referring is Example 1-9 from the previous page which uses 'eif' for the variable name instead of 'port'.

The line of code should read:

TimeServer eif = service.getPort(TimeServer.class);

2nd, in the 4th sentence.

"The port object reference..."

should read:

"The eif object reference..."

with 'eif' in bold.

Note from the Author or Editor:
On page 14, two changes:

The indented code line in roughly the middle of the page is

TimeServer port = service.getPort(TimeServer.class);

It should be

TimeServer eif = service.getPort(TimeServer.class);

So "TimeServer port = ..." should be "TimeServer eif = ...".

The 2nd change is in the immediately following paragraph, last word in 3rd line:

...operations. The port

should be

...operations. The eif

The "eif", like the "port" it replaces, should be in bold typeface.

Brent Reusing  Apr 30, 2009  Sep 01, 2009
Printed
Page 30
1st paragraph

You refer to "ThreadPoolWorker" but there is no other reference to this and I have not been able to find this term on the Internet.
By some chance should this term have been "ThreadPoolExecutor".

Note from the Author or Editor:
p. 30, 1st paragraph after the indented code:

"Once the ThreadPoolWorker has..." should be
"Once the ThreadPoolExecutor has..."

So "ThreadPoolWorker" should be "ThreadPoolExecutor"

The typeface should stay the same.

Enrique Caliz  Apr 24, 2009  Sep 01, 2009
Printed
Page 34
last line

The referenced wsimport-generated class, "client.TempServerImplService", should have been "client.TimeServerImplService ".

Note from the Author or Editor:
Page 34, last line:

client.TempServerImplService

should be

client.TimeServerImplService

So "Temp" should be "Time" and all else remains the same.

Dale Jones  Sep 15, 2009 
Printed
Page 39
From "The TimeServer service can be changed to a document-style service ..."

The paragraphs on page 39, beginning at "The TimeServer service
can be changed to a document-style service ..." to the beginning
of the next subsection "Key Features of Document-Style Services"
seem to contain six related typos.

Given, that "chapter2/ch02/tsd" (note the trailing "d") in the
source code distribution contains the code for subsection "A
Closer Look at WSDL Bindings", then, the content of "chapter2/ch02/tsd" needs a few rectifications.

--- Rectifications in "chapter2/ch02/tsd":
The current file "ch02.tsd.TimeServer.java" is not the SEI but
the SIB, since it contains a class and not an interface.
The SEI is missing. Solution:

1. Rename "ch02.tsd.TimeServer.java" to "ch02.tsd.TimeServer-
Impl.java" (SIB) and change "class TimeServer" to "class
TimeServerImpl" in the new file.
2. Copy "ch01.ts.TimeServer.java" from "chapter1" to "ch02.tsd-
.TimeServer.java" (SEI) and change "package ch01.ts" to
"package ch02.tsd" in the new file.
3. In the Endpoint-Publisher "ch02.tsd.TimeServerPublisher.java"
change "new TimeServer()" to "new TimeServerImpl()".

The wsgen utility know works and generates four source and four
compiled files in the "jaxws" subdirectory.

--- Six related typos (change package infix "ts" to "tsd"):
+ "... in the SEI source, ch02.tsd[not "ts"].TimeServer.java,
before recompiling."
+ "The package has been changed from ch01.ts to
ch02.tsd [not "ts"] to reflect that this is Chapter 2."
+ "% wsgen -keep -cp . ch02.tsd[not "ts"].TimeServerImpl"
+ "The wsgen utility then ... in the subdirectory
ch02/tsd[not "ts"]/jaxws."
+ "... at the published URL
http://localhost:9876/tsd[not "ts"]?wsdl."
+ "...: the package name changes from ch01.ts to
ch02.tsd[not "ts"], ..."

Note from the Author or Editor:
On page 39, the package name

ch02.ts

should be

ch02.tsd

Ralf Wahner  Oct 27, 2010 
Printed
Page 44
Example 2-8 & 2-9

The closing tag of the num2 parameter in boch the wrapped and unwrapped sample should be </num2> instead of </num1>.

Note from the Author or Editor:
In Example 2-8 on p. 44, the 8th line

...>94</num1>

should instead be

...>94</num2>

On the same page in Example 2-9, the 8th line

<num2>94</num1>

should instead be

<num2>94</num2>

Dominik Gruntz  Mar 27, 2009  Sep 01, 2009
Printed
Page 46
Entire section on the Amazon web services

After the book's publication, Amazon changed the API. I've noted the problem in the current errata but have added a ZIP with a fix for all of the Amazon clients. The code is available at:

http://condor.depaul.edu/mkalin

Martin Kalin
Martin Kalin
 
Aug 27, 2012 
Printed
Page 47
in code, just below the middle of page

The given code, that is supposed to connect to Amazon AWS does not work as described. It gives an error - BAD REQUEST. This is because the target system (Amazon AWS) has changed. A small update needs to be made to the code to fix the issue that readers will definitely face. You can find more details of the fix at this location:
http://www.coderanch.com/t/466397/Web-Services/java/Up-Running-not-so-much

Thanks.

Note from the Author or Editor:
Amazon has changed the rules about accessing the E-Commerce service. A full report can be found at

http://www.coderanch.com/t/466397/Web-Services/java/Up-Running-not-so-much

The short version for the AmazonClientW code on p. 47 is to add

...
final String secret_key = args[1];

// Construct a service object to get the port object.
AWSECommerceService service = new AWSECommerceService();

service.setHandlerResolver(new AwsHandlerResolver(secret_key));
...

Amazon now requires both the "access key" and the "secret key" even for their free Web services.

Gopal Sharma  Jan 31, 2010 
47

Hi, I have found the solution for the current WSDL's problem. the url fed to wsimport and custom.xml should be changed to
//http://ecs.amazonaws.com/AWSECommerceService/2009-11-01/AWSECommerceService.wsdl. Because the current wsdl without the time-stamp in the link won't work as expected. Thanks for your invaluable book again.

Ozgur Aydogan

Note from the Author or Editor:
The URL for Amazon's E-Commerce service, given in the wsimport command, should be changed to

http://ecs.amazonaws.com/AWSECommerceService/2009-11-01/AWSECommerceService.wsdl

That's all on the same line, of course. Amazon regularly changes the WSDL; hence, this version should work.

comptrol  May 26, 2010 
Printed
Page 47
Code Example

The AWSClientW.java example requires a HandlerResolver on the service to handle the secret key which is required to authenticate to the service. Otherwise you will receive a 400 Bad Request Error message.

A feature complete example HandlerResolver can be found on the forum under http://developer.amazonwebservices.com/connect/thread.jspa?threadID=35999

The resolver is called AwsHandlerResolver and requires the commons-codec-1.3.jar to work.

Note from the Author or Editor:
Since the book's publication, Amazon has changed the rules for accessing the so-called E-Commerce service. A full clarification is available at

http://developer.amazonwebservices.com/connect/thread.jspa?threadID=35999

I've a ZIP file with the required changes in the code available at:

http://condor.depaul.edu/mkalin



John Yeary  Sep 28, 2010 
Printed
Page 49
1st paragraph

"XSD's message section" should be "WSDL's message section".

Note from the Author or Editor:
1st full paragraph, 2nd sentence should read:

Here is a segment from the WSDL's message section...

Right now it has "XSD's" instead of "WSDL's"

C.P. Byrman  Mar 31, 2009  Sep 01, 2009
Printed
Page 52
3rd paragraph, last sentence

In the sentence "Here is the call to invokeSearch in the simplified client", invokeSearch should be itemSearch.

Note from the Author or Editor:
In the sentence "Here is the call to invokeSearch in the simplified client", the term "invokeSearch" should be "itemSearch".

Jakob Eriksen  Mar 20, 2012 
Printed
Page 54
Top of page

First sentence describes custom.xml as having a

Note from the Author or Editor:
Page 54, end of 1st sentence. The last word in the sentence is "true" but should be "false" --- and the typeface should remain monospace.
This is immediately above Example 2-15.

Dan Kleber  Jul 14, 2009  Sep 01, 2009
Printed
Page 58
source code example

In the main() method the main thread is sent to sleep for 400 milliseconds by following code:


MyHandler myHandler= new MyHandler();
port.itemSearchAsync(search, myHandler);
try{
Thread.sleep(400);
}catch.....


This is a wrong coding approach as the main thread will return to running state after 400+ milliseconds and will end without waiting for the the asynchronous result from the itemSearchAsync() method.

Solution: we should keep the main thread waiting on the myHandler object using following code:

MyHandler myHandler= new MyHandler();
port.itemSearchAsync(search, myHandler);

try{
synchronized (myHandler) {
myHandler.wait();
}
}catch...

A similar notify() needs to be called on the myHandler object from handleResponse() method in static inter class MyHandler, something like this:

synchronized (this) {
this.notify();
}

Note from the Author or Editor:
P. 58, code comment

// In this case, just sleep to give the search process time.
// In a production application, other useful tasks could be
// performed and the application could run indefinitely.

should be changed to

// Thread.sleep(400) sleeps the main thread but does not synchronize
// with the handleResponse callback: the point here is to illustrate
// the general structure of an asynchronous client.

Vivek Malhotra  Mar 22, 2011 
Printed
Page 66
run_example() code segment

wsgen generated GetTimeAsElapsedResponse has functions getReturn and setReturn, not get_return and set_return.

In order to get this example to run, I needed to change :

tr.set_return(new java.util.Date().getTime()

to:

tr.setReturn(new java.util.Date().getTime()

Note from the Author or Editor:
Example 2-20, the run_example() method:

tr.set_return(...);

should be

tr.setReturn(...);

richgt02  Mar 26, 2010 
Printed
Page 67
2nd paragraph, excluding code at the top

"The maximam value of the Java..." should be "The maximum value of the Java..."

Note from the Author or Editor:
Page 67, 2nd full paragraph, last sentence:

"The maximam value..." should be "The maximum value..."

In short, "maximum" is misspelled as "maximam."

Nils F Karlsson  Jan 24, 2010 
Printed
Page 67
1st paragraph excluding code at top

In the 4th line: ?? important namespace URI is the same in both: http://ts.ch01.? ? missing slash at the end. It should be ?? in both: http://ts.ch01/.?

Note from the Author or Editor:
P. 67, 1st full paragraph, 4th line:

...is the same in both: http://ts.ch01. In the SOAP...

should be

...is the same in both: http://ts.ch01/. In the SOAP...

Daniel Kre?ner  Apr 11, 2010 
Printed
Page 74
4th paragraph

in description

Note from the Author or Editor:
4th paragraph, 4th line (next to last line):

"portTypeM" should be "portType"

Anonymous  Jul 06, 2009  Sep 01, 2009
Printed
Page 79
2nd paragraph

There is a comma missing in "Universal Description Discovery and Integration"; it should be "Universal Description, Discovery and Integration".

Note from the Author or Editor:
"Universal Description Discovery and Integration" should be
"Universal Description, Discovery, and Integration"

Jakob Eriksen  Mar 21, 2012 
Printed
Page 83, 84
Multiple locations

On several places, "uddi" is used instead of "uuid" to refer to the header block. An understandable typo in this context!

Note from the Author or Editor:
"uddi" should be replaced by "uuid" on p. 83.

C.P. Byrman  Mar 30, 2009  Sep 01, 2009
Printed
Page 83
Several locations

Instead of "uuid", "uddi" is used (3 times) to refer to the header block. An understandable typo in the context of web service!
The next page (84) also has this typo (1 time).

Note from the Author or Editor:
On p. 83, the acronym UDDI (in lowercase and in uppercanse) should be
replaced by UUID (maintaining case in the replacement). The first time
is right above Example 3-1: "uddi" should be "uuid".
The second time is right after the example: "uddi" should be "uuid".
The last time is the 3rd sentence after the example: "UDDI" should be
"UUID".

On page 84, 1st sentence, "uddi" should be "uuid".

C.P. Byrman  Mar 30, 2009  Sep 01, 2009
PDF
Page 92
1st paragraph, last sentence

"How many ways can
this person traverse, say, a 100 meters? The answer is fib(100): 3,314,859,971."

The 100th fibonacci number is 354224848179261915075. The is way over what a JAVA primary int can hold though. BigInteger can be used to calculate this bigger integer however.

Thanks,

Otoniel

Note from the Author or Editor:
fib(100), the 100th Fibonacci number, is not 3,314,859,971 but, rather, 354,224,848,179,261,915,075 -- well beyond the range of a Java 32-bit signed int.

Otoniel Ortega  Jan 29, 2013 
Printed
Page 93
End of Example 3-5

In method getHandlerChain(...) the return statement is missing. Should be return hchain;

Note from the Author or Editor:
In Example 3-5, the code now ends

hchain.add(new TestHandler()); // for illustration only
}
}

It should end

hchain.add(new TestHandler()); // for illustration only
return hchain;
}
}

So the line "return hchain;" needs to be added.

If spacing becomes a problem because of the additional line, either of the two blanks lines in the code above in Example 3-5 can be removed.

Dominik Gruntz  Mar 30, 2009  Sep 01, 2009
Printed
Page 98 - 101
Testing UUIDValidator

-------
Context:
-------
On pages 100 & 101 include snippets of code given as examples of

Note from the Author or Editor:
1. Page 100, 16 lines from the bottom:

in fibC.UUIDValidator could be commented....

should be

in fibC.UUIDHandler could be commented...

So "UUIDValidator" should be "UUIDHandler"

Dan Kleber  Jul 22, 2009  Sep 01, 2009
Printed
Page 100
middle

The(server-side) handler-chain.xml in ch03/fib is missing in the download. The client-side handler chain (in fibC) is in the download.

Note from the Author or Editor:
The server-side file handler-chain.xml is missing in the code, which needs to be fixed. The change is minor, however, in that the UUIDValidator is now the handler instead of the UUIDHandler.

Mike Sweeney  Mar 06, 2010 
Printed
Page 101
Last paragraph

SOAPMessageHandler and LogicalMessageHandler should be SOAPHandler and LogicalHandler, respectively. The next page (102) has the same typo in the first paragraph.

Note from the Author or Editor:
p. 101, last paragraph:

Replace "SOAPMessageHandler" with "SOAPHandler"

Replace "LogicalMessageHandler" with "LogicalHandler"

C.P. Byrman  Mar 30, 2009  Sep 01, 2009
Printed
Page 103
1st line

UUIDValidator (i.e. the server-side handler) should be changed into UUIDHandler (i.e. the client-side handler).

Note from the Author or Editor:
p. 103, 1st line: replace "UUIDValidator" with "UUIDHandler"

C.P. Byrman  Mar 30, 2009  Sep 01, 2009
Printed
Page 103
Center

"..., but SOAP 1.1 does not offer a way to make the expectation explicit."

This statement needs some clarification, because SOAP 1.1 also has the mustUnderstand attribute:

http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383500

Note from the Author or Editor:
The error occurs in the middle of the page, with the paragraph that starts:

The mustUnderstand makes explicit....

The easiest fix to this technical mistake is to shorten the last sentence in the paragraph to:

Even in SOAP 1.1, of course, such processing may occur.

In other words, drop the ", but SOAP 1.1 does not offer a way to make the expectation explicit."

The page will be short a sentence. I hope that this doesn't force any changes.

C.P. Byrman  Mar 31, 2009  Sep 01, 2009
Printed
Page 104
1st paragraph

LogicalMessageMessageContext should be LogicalMessageContext.

Note from the Author or Editor:
4th line from top: "LogicalMessageMessageContext" should be
"LogicalMessageContext"

C.P. Byrman  Mar 31, 2009  Sep 01, 2009
Printed
Page 108
Between 1st & 2nd sentences

The trailing backslash in:

% java EchoClient http://localhost:9797/ echo

causes a 404 not found since EchoClient already adds a backslash with:

args[0] +

Note from the Author or Editor:
p. 108, near the top, one line of code displayed is:

% java EchoClient http://localhost:9797/ echo

should be

% java EchoClient http://localhost:9797 echo

So the slash in 9797/ should be removed to give just 9797

Dan Kleber  Jul 23, 2009  Sep 01, 2009
Printed
Page 117
Using MTOM for Binary Data

To enable MTOM, I had to take to extra steps:

1) I had to remove the @HandlerChain annotation. It appears that dumping the message in a server-side handler effectively disables MTOM. See: http://forums.java.net/jive/message.jspa?messageID=336446.

2) I also had to use the latest JAX-WS version from https://jax-ws.dev.java.net. Of course, this might depend on your environment.

Note from the Author or Editor:
On p. 117, 10 lines from the top is

@HandlerChain(file = "handler-chain.xml") // for message tracking

Change this line to:

//** @HandlerChain(file = "handler-chain.xml") // disable for MTOM

C.P. Byrman  Apr 15, 2009  Sep 01, 2009
Printed
Page 140
line 16 in code example

the PUT request can be used to update a team's name. The implementation however does copy the team under the new name, the team will still be available under the old name. Moreover, in contrast to the doPost method which checks upon creation of a new team whether there exists already a team under the given name, the doPut shoud perform the same test.

if(team_map.containsKey(new_name))
throw new HTTPException(400);
team_map.remove(name);
team_map.put(new_name, team);

If you change the code, the complete listing on pages 140-146 has to be adjusted as well.

Note from the Author or Editor:
This is a minor technical mistake whose correction involves adding more lines to the code and thus changing the lines per page.

My judgment is to let it go. The code works as is but would be better with the proposed change.

Dominik Gruntz  Apr 10, 2009 
Printed
Page 153
constructor of class NSResolver

the default constructor of NSResolver creates new maps if the references are null. The null tests are not necessary as the two references prefix2uri and uri2prefix are always null.

public NSResolver(){
prefix2uri = Collections.synchronizedMap(...);
uri2prefix = Collections.synchronizedMap(...);
}

Note from the Author or Editor:
On p. 153, the code segment near the top (12 lines down)

public NSResolver() {
if (prefix2uri == null) prefix2uri =
Collections.synchronizedMap(new HashMap<String, String>());
if (uri2prefix == null) uri2prefix =
Collections.synchronizedMap(new HashMap<String, String>());
}

can be simplified to

public NSResolver() {
prefix2uri =
Collections.synchronizedMap(new HashMap<String, String>());
uri2prefix =
Collections.synchronizedMap(new HashMap<String, String>());
}


This change doesn't add or subtract any lines.

Dominik Gruntz  Apr 10, 2009  Sep 01, 2009
Printed
Page 169
YahooClient.main, between "int len = resultList.getLength" and end

The code in my copy of the book (Feb 2009 1st edition) and in the accompanying jar file (jwsur_code.jar) downloaded from oreillynet.com is different, and neither version gives me the expected result.

Using the code from the book (apologies if I've missed anything in transcription, I've double-checked) gives an exception: "javax.xml.transform.TransformerException: Extra illegal tokens: '(', '1', ')', '/', 'urn:yahoo:yn', ':', 'Title'"

Using the downloaded code produces ten identical result lines (save for the line number given by variable i) on the console.


The following amendment worked for me, though there's probably a better way (NB - had to import org.w3c.dom.Node to make this work):

int len = resultList.getLength();
for (int i = 0; i < len; i++) {


Node thisResultNode = resultList.item(i);

NodeList thisResultNodeChildren = thisResultNode.getChildNodes();
String title = thisResultNodeChildren.item(0).getFirstChild().getNodeValue();
String click = thisResultNodeChildren.item(3).getFirstChild().getNodeValue();

System.out.printf("[%d] %s\n", (i + 1), title + " - " + click);

}

Note from the Author or Editor:
I've contacted the reader directly. My code runs as advertised.

The code in display at the top of p. 169 is wrong. The code in the book shows

String title =
xp.evaluate("/yn:ResultSet/yn:Result(" + i + ")/yn:Title",
dom_result.getNode());

but should show

String title =
xp.evaluate("/yn:ResultSet/yn:Result[" + i + "]/yn:Title",
dom_result.getNode());

This occurs twice in the code display. In summary, there should be square brackets [ ] rather than round brackets ( ) in the segment

...:Result[" + i + "]...







Roger Winchester  Sep 19, 2009 
Printed
Page 184
2nd line from bottom

I think, that the output should be

<string>Goodbye, cruel world!</string>

as the curl command specifies a msg parameter.

Note from the Author or Editor:
On p. 184, the second to last line should be changed from

<string>Hello, world!</string>

to

<string>Goodbye, cruel world!</string>

Dominik Gruntz  Apr 10, 2009  Sep 01, 2009
PDF
Page 199
Final paragraph

SRP is expanded as Secure Remote Protocol, but per http://srp.stanford.edu/ it is Secure Remote Password.

Note from the Author or Editor:
Page 199, third line from bottom:

(Secure Remote Protocol) should be (Secure Remote Password protocol)

Chris Hodapp  Aug 08, 2011 
Printed
Page 201
Last paragraph

Last sentence reads: "In development phase, however, it may be useful to turn off validation because, for example, the truststore has does not contain the appropriate certificates".

Should perhaps be:

"In the development phase, however, it may be useful to turn off validation because, for example, the truststore does not contain the appropriate certificates".

Note from the Author or Editor:
P. 201, last sentence:

In development phase,...

should be changed to

In the development phase,...

Bjarne Mundal  Nov 30, 2009 
Printed
Page 204
In the publicsh method

In the publish method, the line

HttpContext http_ctx = server.createContext(path);

is redundant, as the context is already set in the get_https_server method.

Error found by Steve Talbot.

Martin Kalin
Martin Kalin
 
Jan 26, 2010 
Printed
Page 213
Deploying a @WebService Under Tomcat

In order to run the example under Tomcat it seems that it is necessary to copy JAX-WS librairies (which can be downloaded from https://jax-ws.dev.java.net/) in TOMCAT_HOME/shared/lib. If not, the class com.sun.xml.ws.transport.http.servlet.WSServletContextListener cannot be found when the the web application starts.

Note from the Author or Editor:
p. 213

In order to deploy JAX-WS applications under Tomcat, the Metro packages (downloadable from https://jax-ws.dev.java.net) should be copied into TOMCAT_HOME/lib. Tomcat then should be restarted.

Sylvain Noyon  May 16, 2010 
PDF
Page 213
Fifth paragraph, right before the web.xml snippet

The name of the second class that should be used from JAX-WS 2.1 is WSServletContextListener instead of WSServletContainerListener. It is actually shown correctly on the next page.

Note from the Author or Editor:
On p. 213, immediately above the XML snippet at the bottom of the page, the class name WSServletContainerListener should be

WSServletContextListener

Gustavo Garnica  Oct 26, 2010 
Printed
Page 244
Very last sentence

The last line

% wsimport -keep -p clientC...

should be

% wsimport -keep -p teamsC...

So the package for the client artifacts should be teamsC rather than clientC.

Martin Kalin
Martin Kalin
 
Feb 05, 2010 
Printed
Page 251
First code script

The example on page 250 - 251 shows a browser based client of a web service. The jsp page that actually calls the web service (page 251) uses 3 instance variables (f2c, c2f and temp).
I think that the best choice is to use local variables instead since the web container creates just one instance of each servlet and the access to the state of a servlet is not thread-safe (as the author states on page 241: "EJBs, unlike servlets, are thread-safe....").

Thanks a lot.

Note from the Author or Editor:
In Example 7-3 (pages 250-1), the JSP script would be thread-safe (hence, better) if f2c, c2f, and temp were local variables rather than instance fields.

Nico Tanzarella  Sep 15, 2013 
Printed
Page 256
line 8:

on page 256, line 8: It says "EBJ-Based" in the paragraph heading. I think it should have been "EJB-Based" instead.

Note from the Author or Editor:
On p. 256, the header on line 8

The Endpoint URL for an EBJ-Based Service

should be

The Endpoint URL for an EJB-Based Service

In short, "EBJ" should be "EJB".


Anonymous  Apr 26, 2010 
Printed
Page 288
Last sentence of penultimate paragraph on page.

"Transparent XML sounds like an empty slogan only to someone who has not had to deal directly with large and complicated XML documents."

If you have not dealt with complicated XML documents, would you not consider the slogan to be sensible and correct, i.e. non-empty? In other words, shouldn't the sentence be something more along the lines of:

"Transparent XML is nothing but an empty slogan to everyone who has had to deal directly with large and complicated XML documents."

Note from the Author or Editor:
P. 288, 2nd paragraph in SOAP and REST in Harmony section, last sentence:

The sentence

Transparent XML sounds like...

should be changed to

Transparent XML is nothing but an empty slogan to everyone who has had to deal directly with large and complicated XML documents.

The "Transparent XML" should still be in in italics.


Bjarne Mundal  Nov 17, 2009 
Printed
Page 288
Last sentence in next-to-last paragraph,

Note from the Author or Editor:
p. 288, last sentence, 4th paragraph from top:

"XML dcouments" should be "XML documents"

So the word "documents" is misspelled.

Dan Kleber  Jul 24, 2009  Sep 01, 2009