. 캐스터는 정의와 XML 1.1에 org.exolab.castor.xml.XMLSerializerFactory
및 org.exolab.castor.xml.Serializer
구현을 마샬링하는 구성 할 수 있습니다
package com.foo.castor;
......
import org.exolab.castor.xml.BaseXercesOutputFormat;
import org.exolab.castor.xml.Serializer;
import org.exolab.castor.xml.XMLSerializerFactory;
import org.xml.sax.DocumentHandler;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XML11Serializer;
@SuppressWarnings("deprecation")
public class CastorXml11SerializerFactory implements XMLSerializerFactory {
private static class CastorXml11OutputFormat extends BaseXercesOutputFormat{
public CastorXml11OutputFormat(){
super._outputFormat = new OutputFormat();
}
}
private static class CastorXml11Serializer implements Serializer {
private XML11Serializer serializer = new XML11Serializer();
@Override
public void setOutputCharStream(Writer out) {
serializer.setOutputCharStream(out);
}
@Override
public DocumentHandler asDocumentHandler() throws IOException {
return serializer.asDocumentHandler();
}
@Override
public void setOutputFormat(org.exolab.castor.xml.OutputFormat format) {
serializer.setOutputFormat((OutputFormat)format.getFormat());
}
@Override
public void setOutputByteStream(OutputStream output) {
serializer.setOutputByteStream(output);
}
}
@Override
public Serializer getSerializer() {
return new CastorXml11Serializer();
}
@Override
public org.exolab.castor.xml.OutputFormat getOutputFormat() {
return new CastorXml11OutputFormat();
}
}
세계적 파일
org.exolab.castor.xml.serializer.factory=com.foo.castor.CastorXml11SerializerFactory
org.exolab.castor.xml.version=1.1
또는 CastorMarshaller
특정의 setCastorProperties
방법으로이 두 가지 속성을 설정 castor.properties
에.
그러나 XML 1.1 is not accepted by browsers 및 not all XML parsers can parse XML 1.1 out of the box입니다.
조금 더 파고 들자 잘못된 문자가 백 스페이스 (ASCII 코드 = 8)에 불과하다는 것을 알았습니다. 백 스페이스 문자가 문자열에 어떻게 삽입되었는지 이상합니다. 제안 사항이 있으십니까? – Taran
자바 객체를 마샬링하기 전에 내용을 인코딩하고 언 마샬링 후에 디코딩하십시오. 이것은 이것을 해결할 수있는 유일한 방법 인 것 같습니다. marshal.setEncoding ("base64"); 사용 된 base 64 인코딩 및 디코딩. – constantlearner
바이너리 데이터가 아니기 때문에 base64를 사용하는 것이 적절하지 않다고 생각합니다. 아래 답변은 도움이됩니다. 감사. – Taran