rubys 02/01/20 16:01:57 Modified: java/src/org/apache/soap/encoding/soapenc VectorSerializer.java Log: Check for and de-reference hrefs, if present. Submitted by: Simon Fell <[EMAIL PROTECTED]> Revision Changes Path 1.8 +16 -3 xml-soap/java/src/org/apache/soap/encoding/soapenc/VectorSerializer.java Index: VectorSerializer.java =================================================================== RCS file: /home/cvs/xml-soap/java/src/org/apache/soap/encoding/soapenc/VectorSerializer.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- VectorSerializer.java 6 Sep 2001 20:34:17 -0000 1.7 +++ VectorSerializer.java 21 Jan 2002 00:01:57 -0000 1.8 @@ -180,11 +180,24 @@ String actualEncStyle = declEncStyle != null ? declEncStyle : inScopeEncStyle; - QName declItemType = SoapEncUtils.getTypeQName(tempEl); + + // If it's a local reference, follow it. + String href = tempEl.getAttribute(Constants.ATTR_REFERENCE); + Element actualEl = tempEl; + if(href != null && !href.equals("") && (href.charAt(0) == '#')) + { + href = href.substring(1); + actualEl = DOMUtils.getElementByID(src.getOwnerDocument().getDocumentElement(),href); + if (actualEl == null) { + throw new IllegalArgumentException("No such ID '" + href + "'"); + } + } + + QName declItemType = SoapEncUtils.getTypeQName(actualEl); QName actualItemType = declItemType; - Bean itemBean = xjmr.unmarshall(actualEncStyle, actualItemType, - tempEl, ctx); + Bean itemBean = xjmr.unmarshall(actualEncStyle, actualItemType, + actualEl, ctx); v.addElement(itemBean.value);