зеркало из
https://github.com/iharh/notes.git
synced 2025-10-29 20:56:06 +02:00
m
Этот коммит содержится в:
родитель
1939f1ef84
Коммит
a17b4473fc
@ -1,3 +1,6 @@
|
||||
2023
|
||||
Jenkins - 2023 - MongoDB for Jobseekers
|
||||
!!! need
|
||||
2022
|
||||
Giamas - Masterng MongoDB 6x 3rd ed
|
||||
1BB10A3547DE8925B9FF3CB8D5C50513
|
||||
|
||||
20
db/sql/mssql/tools/sqlpackage.txt
Обычный файл
20
db/sql/mssql/tools/sqlpackage.txt
Обычный файл
@ -0,0 +1,20 @@
|
||||
https://learn.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage
|
||||
https://learn.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-download
|
||||
https://dotnet.microsoft.com/en-us/download/dotnet/6.0
|
||||
https://dotnet.microsoft.com/en-us/download/dotnet/scripts
|
||||
https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script
|
||||
dotnet tool install -g microsoft.sqlpackage
|
||||
dotnet tool update -g microsoft.sqlpackage
|
||||
dotnet tool uninstall -g microsoft.sqlpackage
|
||||
|
||||
https://learn.microsoft.com/en-us/sql/tools/sqlpackage/troubleshooting-issues-and-performance-with-sqlpackage
|
||||
https://learn.microsoft.com/en-us/sql/tools/sqlpackage/troubleshooting-issues-and-performance-with-sqlpackage#azure-sql-database
|
||||
/at:$AccessToken
|
||||
https://learn.microsoft.com/en-us/sql/tools/sqlpackage/troubleshooting-issues-and-performance-with-sqlpackage?view=sql-server-ver16#connection
|
||||
|
||||
export
|
||||
https://learn.microsoft.com/en-us/sql/tools/sqlpackage/sqlpackage-export
|
||||
https://learn.microsoft.com/en-us/rest/api/sql/2021-08-01-preview/databases/export?tabs=HTTP
|
||||
! need admin creds
|
||||
bacpac
|
||||
https://www.youtube.com/watch?v=N0BC68j0Ex0
|
||||
4
devops/cloud/azure/cli.txt
Обычный файл
4
devops/cloud/azure/cli.txt
Обычный файл
@ -0,0 +1,4 @@
|
||||
az
|
||||
account
|
||||
get-access-token
|
||||
--query accessToken --output tsv
|
||||
2
pl/java/docs/people/epam.txt
Обычный файл
2
pl/java/docs/people/epam.txt
Обычный файл
@ -0,0 +1,2 @@
|
||||
EPAM Light Talks
|
||||
https://www.youtube.com/playlist?list=PLGirpy4h9wao83o_A41co0uVbb3SJQy3D
|
||||
616
pl/java/libfws/io/file-formats/json/jackson/features/xml.txt
Обычный файл
616
pl/java/libfws/io/file-formats/json/jackson/features/xml.txt
Обычный файл
@ -0,0 +1,616 @@
|
||||
2022
|
||||
https://www.baeldung.com/jackson-xml-serialization-and-deserialization
|
||||
|
||||
XMLOutputFactory
|
||||
static final String DEFAULIMPL = "com.sun.xml.internal.stream.XMLOutputFactoryImpl";
|
||||
|
||||
XMLOutputFactoryImpl {
|
||||
XMLStreamWriter createXMLStreamWriter(StreamResult sr, String encoding) ... {
|
||||
...
|
||||
return fStreamWriter = new XMLStreamWriterImpl(sr, encoding,
|
||||
new PropertyManager(fPropertyManager));
|
||||
}
|
||||
}
|
||||
|
||||
....
|
||||
/**
|
||||
* We need a {@link ValueSerializerModifier} to replace default <code>BeanSerializer</code>
|
||||
* with XML-specific one; mostly to ensure that attribute properties are output
|
||||
* before element properties.
|
||||
*/
|
||||
public class XmlBeanSerializerModifier extends ValueSerializerModifier
|
||||
implements java.io.Serializable {
|
||||
...
|
||||
|
||||
/*
|
||||
/**********************************************************
|
||||
/* Overridden methods
|
||||
/**********************************************************
|
||||
*/
|
||||
|
||||
/**
|
||||
* First thing to do is to find annotations regarding XML serialization,
|
||||
* and wrap collection serializers.
|
||||
*/
|
||||
@Override
|
||||
public List<BeanPropertyWriter> changeProperties(SerializationConfig config, // !!! called at databind
|
||||
BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties)
|
||||
{
|
||||
final AnnotationIntrospector intr = config.getAnnotationIntrospector();
|
||||
for (int i = 0, len = beanProperties.size(); i < len; ++i) {
|
||||
BeanPropertyWriter bpw = beanProperties.get(i);
|
||||
final AnnotatedMember member = bpw.getMember();
|
||||
String ns = AnnotationUtil.findNamespaceAnnotation(config, intr, member);
|
||||
Boolean isAttribute = AnnotationUtil.findIsAttributeAnnotation(config, intr, member); // !!!
|
||||
Boolean isText = AnnotationUtil.findIsTextAnnotation(config, intr, member);
|
||||
Boolean isCData = AnnotationUtil.findIsCDataAnnotation(config, intr, member);
|
||||
bpw.setInternalSetting(XmlBeanSerializerBase.KEY_XML_INFO,
|
||||
new XmlInfo(isAttribute, ns, isText, isCData)); // !!!
|
||||
|
||||
// Actually: if we have a Collection type, easiest place to add wrapping would be here...
|
||||
// or: let's also allow wrapping of "untyped" (Object): assuming it is a dynamically
|
||||
// typed Collection...
|
||||
if (!TypeUtil.isIndexedType(bpw.getType())) {
|
||||
continue;
|
||||
}
|
||||
PropertyName wrappedName = PropertyName.construct(bpw.getName(), ns);
|
||||
PropertyName wrapperName = bpw.getWrapperName();
|
||||
|
||||
// first things first: no wrapping?
|
||||
if (wrapperName == null || wrapperName == PropertyName.NO_NAME) {
|
||||
continue;
|
||||
}
|
||||
// no local name? Just double the wrapped name for wrapper
|
||||
String localName = wrapperName.getSimpleName();
|
||||
if (localName == null || localName.length() == 0) {
|
||||
wrapperName = wrappedName;
|
||||
}
|
||||
beanProperties.set(i, new XmlBeanPropertyWriter(bpw, wrapperName, wrappedName)); // !!!
|
||||
}
|
||||
return beanProperties;
|
||||
}
|
||||
...
|
||||
@Override // !!! actually we go here
|
||||
// need to get List<BeanPropertyWriter> beanProperties in some way
|
||||
public JsonSerializer<?> modifySerializer(SerializationConfig config,
|
||||
BeanDescription beanDesc, JsonSerializer<?> serializer)
|
||||
{
|
||||
/* First things first: we can only handle real BeanSerializers; question
|
||||
* is, what to do if it's not one: throw exception or bail out?
|
||||
* For now let's do latter.
|
||||
*/
|
||||
if (!(serializer instanceof BeanSerializerBase)) {
|
||||
return serializer;
|
||||
}
|
||||
return new XmlBeanSerializer((BeanSerializerBase) serializer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
JacksonXmlModule {
|
||||
...
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void setupModule(SetupContext context)
|
||||
{
|
||||
// Need to modify BeanDeserializer, BeanSerializer that are used
|
||||
context.addBeanSerializerModifier(new XmlBeanSerializerModifier()); // !!!
|
||||
context.addBeanDeserializerModifier(new XmlBeanDeserializerModifier(_cfgNameForTextElement));
|
||||
|
||||
// as well as AnnotationIntrospector
|
||||
context.insertAnnotationIntrospector(_constructIntrospector()); // !!!
|
||||
|
||||
// and finally inform XmlFactory about overrides, if need be:
|
||||
if (_cfgNameForTextElement != FromXmlParser.DEFAULT_UNNAMED_TEXT_PROPERTY) {
|
||||
XmlMapper m = (XmlMapper) context.getOwner();
|
||||
m.setXMLTextElementName(_cfgNameForTextElement);
|
||||
}
|
||||
|
||||
// Usually this would be the first call; but here anything added will
|
||||
// be stuff user may has added, so do it afterwards instead.
|
||||
super.setupModule(context);
|
||||
}
|
||||
...
|
||||
protected AnnotationIntrospector _constructIntrospector() {
|
||||
return new JacksonXmlAnnotationIntrospector(_cfgDefaultUseWrapper);
|
||||
}
|
||||
}
|
||||
???
|
||||
https://github.com/FasterXML/jackson-dataformat-xml/blob/2.16/src/test/java/com/fasterxml/jackson/dataformat/xml/deser/builder/BuilderSimpleTest.java
|
||||
setupModule...
|
||||
|
||||
public class XmlMapper extends ObjectMapper {
|
||||
...
|
||||
protected final static JacksonXmlModule DEFAULT_XML_MODULE = new JacksonXmlModule();
|
||||
...
|
||||
protected final static DefaultXmlPrettyPrinter DEFAULT_XML_PRETTY_PRINTER = new DefaultXmlPrettyPrinter();
|
||||
|
||||
// need to hold on to module instance just in case copy() is used
|
||||
protected final JacksonXmlModule _xmlModule;
|
||||
|
||||
/*
|
||||
/**********************************************************
|
||||
/* Life-cycle: construction, configuration
|
||||
/**********************************************************
|
||||
*/
|
||||
|
||||
public XmlMapper(XmlFactory xmlFactory, JacksonXmlModule module) {
|
||||
...
|
||||
super(xmlFactory, new XmlSerializerProvider(new XmlRootNameLookup()), // !!!! need to add more params here
|
||||
new XmlDeserializationContext(BeanDeserializerFactory.instance));
|
||||
|
||||
// by default - BeanSerializerFactory
|
||||
...
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
!!! MapperBuilder
|
||||
!!! addModule
|
||||
|
||||
|
||||
JsonFactory.Feature
|
||||
ToXmlGenerator.Feature
|
||||
WRITE_XML_DECLARATION
|
||||
|
||||
src/main/java/com/fasterxml/jackson/dataformat/xml/ser/XmlBeanPropertyWriter.java
|
||||
...
|
||||
|
||||
... XmlBeanSerializer {
|
||||
/**
|
||||
* Main serialization method that will delegate actual output to configured
|
||||
* {@link BeanPropertyWriter} instances.
|
||||
*/
|
||||
@Override
|
||||
public void serialize(Object bean, JsonGenerator g, SerializerProvider provider) throws IOException
|
||||
{
|
||||
if (_objectIdWriter != null) {
|
||||
_serializeWithObjectId(bean, g, provider, true);
|
||||
return;
|
||||
}
|
||||
g.writeStartObject();
|
||||
if (_propertyFilterId != null) {
|
||||
serializeFieldsFiltered(bean, g, provider);
|
||||
} else {
|
||||
serializeFields(bean, g, provider);
|
||||
}
|
||||
g.writeEndObject();
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
public abstract class XmlBeanSerializerBase extends BeanSerializerBase
|
||||
...
|
||||
public XmlBeanSerializerBase(BeanSerializerBase src)
|
||||
{
|
||||
super(src);
|
||||
|
||||
// Then make sure attributes are sorted before elements, keep track
|
||||
// of how many there are altogether
|
||||
int attrCount = 0;
|
||||
for (BeanPropertyWriter bpw : _props) {
|
||||
if (_isAttribute(bpw)) { // Yup: let's build re-ordered list then // !!!
|
||||
attrCount = _orderAttributesFirst(_props, _filteredProps);
|
||||
break;
|
||||
}
|
||||
}
|
||||
_attributeCount = attrCount;
|
||||
...
|
||||
}
|
||||
...
|
||||
protected static boolean _isAttribute(BeanPropertyWriter bpw)
|
||||
{
|
||||
XmlInfo info = (XmlInfo) bpw.getInternalSetting(KEY_XML_INFO);
|
||||
return (info != null) && info.isAttribute();
|
||||
}
|
||||
...
|
||||
/**
|
||||
* Main serialization method needs to be overridden to allow XML-specific
|
||||
* extra handling, such as indication of whether to write attributes or
|
||||
* elements.
|
||||
*/
|
||||
@Override
|
||||
protected void serializeFields(Object bean, JsonGenerator gen0, SerializerProvider provider)
|
||||
throws IOException
|
||||
{
|
||||
... use this stuff !!!
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
...Base
|
||||
serializeAsField // ???
|
||||
|
||||
|
||||
databind
|
||||
|
||||
BeanSerializerBase {
|
||||
...
|
||||
/**
|
||||
* Writers used for outputting actual property values
|
||||
*/
|
||||
final protected BeanPropertyWriter[] _props;
|
||||
|
||||
/**
|
||||
* Optional filters used to suppress output of properties that
|
||||
* are only to be included in certain views
|
||||
*/
|
||||
final protected BeanPropertyWriter[] _filteredProps;
|
||||
...
|
||||
}
|
||||
|
||||
ObjectMapper {
|
||||
...
|
||||
protected DefaultSerializerProvider _serializerProvider;
|
||||
protected SerializerFactory _serializerFactory;
|
||||
...
|
||||
public ObjectMapper(JsonFactory jf,
|
||||
DefaultSerializerProvider sp, DefaultDeserializationContext dc)
|
||||
{
|
||||
// Default serializer factory is stateless, can just assign
|
||||
_serializerFactory = BeanSerializerFactory.instance; // !!!
|
||||
}
|
||||
...
|
||||
/**
|
||||
* Method for setting specific {@link SerializerFactory} to use
|
||||
* for constructing (bean) serializers.
|
||||
*/
|
||||
public ObjectMapper setSerializerFactory(SerializerFactory f) {
|
||||
_serializerFactory = f;
|
||||
return this;
|
||||
}
|
||||
|
||||
public SerializerFactory getSerializerFactory() {
|
||||
return _serializerFactory;
|
||||
}
|
||||
|
||||
protected DefaultSerializerProvider _serializerProvider(SerializationConfig config) {
|
||||
return _serializerProvider.createInstance(config, _serializerFactory);
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java
|
||||
// used only Here and at ObjectMapper
|
||||
public final static BeanSerializerFactory instance = new BeanSerializerFactory(null);
|
||||
|
||||
...
|
||||
@SuppressWarnings("unchecked")
|
||||
protected JsonSerializer<Object> constructBeanOrAddOnSerializer(SerializerProvider prov,
|
||||
JavaType type, BeanDescription beanDesc, boolean staticTyping)
|
||||
throws JsonMappingException
|
||||
{
|
||||
!!!!! probably need to extend BeanSerializerFactory !!!!!
|
||||
? BeanSerializerBuilder
|
||||
...
|
||||
List<BeanPropertyWriter> props = findBeanProperties(prov, beanDesc, builder);
|
||||
if (props == null) {
|
||||
props = new ArrayList<BeanPropertyWriter>();
|
||||
} else {
|
||||
props = removeOverlappingTypeIds(prov, beanDesc, builder, props);
|
||||
}
|
||||
|
||||
// [databind#638]: Allow injection of "virtual" properties:
|
||||
prov.getAnnotationIntrospector().findAndAddVirtualProperties(config, beanDesc.getClassInfo(), props);
|
||||
|
||||
// [JACKSON-440] Need to allow modification bean properties to serialize:
|
||||
if (_factoryConfig.hasSerializerModifiers()) {
|
||||
for (BeanSerializerModifier mod : _factoryConfig.serializerModifiers()) {
|
||||
props = mod.changeProperties(config, beanDesc, props); // !!!
|
||||
}
|
||||
}
|
||||
...
|
||||
}
|
||||
...
|
||||
|
||||
/**
|
||||
* Method that will try to construct a {@link BeanSerializer} for
|
||||
* given class if at least one property is found, OR, if not,
|
||||
* one of add-on types.
|
||||
*<p>
|
||||
* NOTE: behavior changed a bit
|
||||
*/
|
||||
public JsonSerializer<Object> findBeanOrAddOnSerializer(SerializerProvider prov, JavaType type, // ??? usages
|
||||
BeanDescription beanDesc, boolean staticTyping)
|
||||
throws JsonMappingException
|
||||
{
|
||||
// First things first: we know some types are not beans...
|
||||
if (!isPotentialBeanType(type.getRawClass())) {
|
||||
// 03-Aug-2012, tatu: Except we do need to allow serializers for Enums,
|
||||
// as per [databind#24], [databind#2576]
|
||||
if (!ClassUtil.isEnumType(type.getRawClass())) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return constructBeanOrAddOnSerializer(prov, type, beanDesc, staticTyping); // !!!
|
||||
}
|
||||
|
||||
protected JsonSerializer<?> _createSerializer2(SerializerProvider prov,
|
||||
JavaType type, BeanDescription beanDesc, boolean staticTyping)
|
||||
throws JsonMappingException
|
||||
{
|
||||
JsonSerializer<?> ser = null;
|
||||
final SerializationConfig config = prov.getConfig();
|
||||
...
|
||||
if (ser == null) {
|
||||
// Otherwise, we will check "primary types"; both marker types that
|
||||
// indicate specific handling (JsonSerializable), or main types that have
|
||||
// precedence over container types
|
||||
ser = findSerializerByLookup(type, config, beanDesc, staticTyping);
|
||||
if (ser == null) {
|
||||
ser = findSerializerByPrimaryType(prov, type, beanDesc, staticTyping);
|
||||
if (ser == null) {
|
||||
// And this is where this class comes in: if type is not a
|
||||
// known "primary JDK type", perhaps it's a bean? We can still
|
||||
// get a null, if we can't find a single suitable bean property.
|
||||
ser = findBeanOrAddOnSerializer(prov, type, beanDesc, staticTyping); // !!!
|
||||
...
|
||||
}
|
||||
...
|
||||
}
|
||||
...
|
||||
}
|
||||
if (ser != null) {
|
||||
// [databind#120]: Allow post-processing
|
||||
if (_factoryConfig.hasSerializerModifiers()) {
|
||||
for (BeanSerializerModifier mod : _factoryConfig.serializerModifiers()) {
|
||||
ser = mod.modifySerializer(config, beanDesc, ser); // !!! just call here instead of changeProperties
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return ser;
|
||||
}
|
||||
|
||||
/**
|
||||
* Main serializer constructor method. We will have to be careful
|
||||
* with respect to ordering of various method calls: essentially
|
||||
* we want to reliably figure out which classes are standard types,
|
||||
* and which are beans. The problem is that some bean Classes may
|
||||
* implement standard interfaces (say, {@link java.lang.Iterable}.
|
||||
*<p>
|
||||
* Note: sub-classes may choose to complete replace implementation,
|
||||
* if they want to alter priority of serializer lookups.
|
||||
*/
|
||||
@Override
|
||||
@SuppressWarnings("unchecked")
|
||||
public JsonSerializer<Object> createSerializer(SerializerProvider prov,
|
||||
JavaType origType)
|
||||
throws JsonMappingException
|
||||
{
|
||||
// Very first thing, let's check if there is explicit serializer annotation:
|
||||
final SerializationConfig config = prov.getConfig();
|
||||
BeanDescription beanDesc = config.introspect(origType);
|
||||
JsonSerializer<?> ser = findSerializerFromAnnotation(prov, beanDesc.getClassInfo());
|
||||
if (ser != null) {
|
||||
return (JsonSerializer<Object>) ser;
|
||||
}
|
||||
boolean staticTyping;
|
||||
// Next: we may have annotations that further indicate actual type to use (a super type)
|
||||
final AnnotationIntrospector intr = config.getAnnotationIntrospector();
|
||||
JavaType type;
|
||||
|
||||
if (intr == null) {
|
||||
type = origType;
|
||||
} else {
|
||||
try {
|
||||
type = intr.refineSerializationType(config, beanDesc.getClassInfo(), origType);
|
||||
} catch (JsonMappingException e) {
|
||||
return prov.reportBadTypeDefinition(beanDesc, e.getMessage());
|
||||
}
|
||||
}
|
||||
if (type == origType) { // no changes, won't force static typing
|
||||
staticTyping = false;
|
||||
} else { // changes; assume static typing; plus, need to re-introspect if class differs
|
||||
staticTyping = true;
|
||||
if (!type.hasRawClass(origType.getRawClass())) {
|
||||
beanDesc = config.introspect(type);
|
||||
}
|
||||
}
|
||||
// Slight detour: do we have a Converter to consider?
|
||||
Converter<Object,Object> conv = beanDesc.findSerializationConverter();
|
||||
if (conv == null) { // no, simple
|
||||
return (JsonSerializer<Object>) _createSerializer2(prov, type, beanDesc, staticTyping); // !!! here
|
||||
}
|
||||
JavaType delegateType = conv.getOutputType(prov.getTypeFactory());
|
||||
|
||||
// One more twist, as per [databind#288]; probably need to get new BeanDesc
|
||||
if (!delegateType.hasRawClass(type.getRawClass())) {
|
||||
beanDesc = config.introspect(delegateType);
|
||||
// [#359]: explicitly check (again) for @JsonSerializer...
|
||||
ser = findSerializerFromAnnotation(prov, beanDesc.getClassInfo());
|
||||
}
|
||||
// [databind#731]: Should skip if nominally java.lang.Object
|
||||
if (ser == null && !delegateType.isJavaLangObject()) {
|
||||
ser = _createSerializer2(prov, delegateType, beanDesc, true); // !!! and here
|
||||
}
|
||||
return new StdDelegatingSerializer(conv, delegateType, ser);
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
java/com/fasterxml/jackson/databind/SerializerProvider.java
|
||||
|
||||
public abstract class SerializerProvider extends DatabindContext {
|
||||
...
|
||||
protected JsonSerializer<Object> _createUntypedSerializer(JavaType type)
|
||||
throws JsonMappingException
|
||||
{
|
||||
...
|
||||
return (JsonSerializer<Object>)_serializerFactory.createSerializer(this, type); // !!!
|
||||
}
|
||||
|
||||
/**
|
||||
* Method called to locate regular serializer, matching type serializer,
|
||||
* and if both found, wrap them in a serializer that calls both in correct
|
||||
* sequence. This method is currently only used for root-level serializer
|
||||
* handling to allow for simpler caching. A call can always be replaced
|
||||
* by equivalent calls to access serializer and type serializer separately.
|
||||
*
|
||||
* @param valueType Type for purpose of locating a serializer; usually dynamic
|
||||
* runtime type, but can also be static declared type, depending on configuration
|
||||
* @param cache Whether resulting value serializer should be cached or not; this is just
|
||||
* a hint
|
||||
* @param property When creating secondary serializers, property for which
|
||||
* serializer is needed: annotations of the property (or bean that contains it)
|
||||
* may be checked to create contextual serializers.
|
||||
*/
|
||||
public JsonSerializer<Object> findTypedValueSerializer(Class<?> valueType, boolean cache, BeanProperty property) // !!!!! really call this
|
||||
throws JsonMappingException // cache = true, property = null
|
||||
{
|
||||
// Two-phase lookups; local non-shared cache, then shared:
|
||||
JsonSerializer<Object> ser = _knownSerializers.typedValueSerializer(valueType);
|
||||
if (ser != null) {
|
||||
return ser;
|
||||
}
|
||||
// If not, maybe shared map already has it?
|
||||
ser = _serializerCache.typedValueSerializer(valueType);
|
||||
if (ser != null) {
|
||||
return ser;
|
||||
}
|
||||
|
||||
// Well, let's just compose from pieces:
|
||||
ser = findValueSerializer(valueType, property);
|
||||
TypeSerializer typeSer = _serializerFactory.createTypeSerializer(_config,
|
||||
_config.constructType(valueType));
|
||||
if (typeSer != null) {
|
||||
typeSer = typeSer.forProperty(property);
|
||||
ser = new TypeWrappedSerializer(typeSer, ser);
|
||||
}
|
||||
if (cache) {
|
||||
_serializerCache.addTypedSerializer(valueType, ser);
|
||||
}
|
||||
return ser;
|
||||
}
|
||||
|
||||
|
||||
_createAndCacheUntypedSerializer
|
||||
_createUntypedSerializer
|
||||
|
||||
-> findValueSerializer
|
||||
-> findContentValueSerializer
|
||||
findPrimaryPropertySerializer
|
||||
_findExplicitUntypedSerializer
|
||||
...
|
||||
}
|
||||
|
||||
java/com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.java
|
||||
DefaultSerializerProvier
|
||||
hasSerializerFor {
|
||||
}
|
||||
|
||||
|
||||
MapSerializer
|
||||
createContextual
|
||||
ObjectArraySerializer
|
||||
createContextual
|
||||
|
||||
public class JsonValueSerializer
|
||||
extends StdSerializer<Object>
|
||||
implements ContextualSerializer, JsonFormatVisitable
|
||||
{
|
||||
@Override
|
||||
public void serialize(Object bean, JsonGenerator gen, SerializerProvider ctxt) throws IOException // !!!!!
|
||||
{
|
||||
Object value;
|
||||
try {
|
||||
value = _accessor.getValue(bean);
|
||||
} catch (Exception e) {
|
||||
value = null;
|
||||
wrapAndThrow(ctxt, e, bean, _accessor.getName() + "()");
|
||||
}
|
||||
|
||||
if (value == null) {
|
||||
ctxt.defaultSerializeNull(gen);
|
||||
} else {
|
||||
JsonSerializer<Object> ser = _valueSerializer;
|
||||
if (ser == null) {
|
||||
ser = _findDynamicSerializer(ctxt, value.getClass()); // !!!
|
||||
}
|
||||
if (_valueTypeSerializer != null) {
|
||||
ser.serializeWithType(value, gen, ctxt, _valueTypeSerializer);
|
||||
} else {
|
||||
ser.serialize(value, gen, ctxt);
|
||||
}
|
||||
}
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
???
|
||||
BeanSerializerBase
|
||||
resolve
|
||||
...
|
||||
????
|
||||
public Object getInternalSetting(Object key) {
|
||||
return (_internalSettings == null) ? null : _internalSettings.get(key);
|
||||
}
|
||||
|
||||
|
||||
java/com/fasterxml/jackson/databind/ser/SerializerFactory.java
|
||||
37: public abstract SerializerFactory withSerializerModifier(BeanSerializerModifier modifier);
|
||||
|
||||
java/com/fasterxml/jackson/databind/SerializerProvider.java
|
||||
|
||||
java/com/fasterxml/jackson/databind/SerializerProvider.java
|
||||
|
||||
public abstract class SerializerProvider extends DatabindContext {
|
||||
|
||||
protected JsonSerializer<Object> _createUntypedSerializer(JavaType type) throws JsonMappingException {
|
||||
1503: return (JsonSerializer<Object>)_serializerFactory.createSerializer(this, type);
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
|
||||
// actual code flow
|
||||
|
||||
ObjectMapper {
|
||||
...
|
||||
protected DefaultSerializerProvider _serializerProvider(SerializationConfig config) {
|
||||
return _serializerProvider.createInstance(config, _serializerFactory); // !!!
|
||||
// !!! XmlSerializerProvider, BeanSerializerFactory
|
||||
}
|
||||
...
|
||||
}
|
||||
|
||||
public class XmlSerializerProvider extends DefaultSerializerProvider {
|
||||
...
|
||||
public XmlSerializerProvider(XmlSerializerProvider src, SerializationConfig config, SerializerFactory f) { // ???
|
||||
super(src, config, f);
|
||||
_rootNameLookup = src._rootNameLookup;
|
||||
}
|
||||
...
|
||||
@SuppressWarnings("resource")
|
||||
@Override
|
||||
// gen -> ToXmlGenerator
|
||||
// ??? SerializerProvider
|
||||
public void serializeValue(JsonGenerator gen, Object value) throws IOException {
|
||||
...
|
||||
|
||||
//!!! cls - .databind.ObjectNode -> SerializableSerializer
|
||||
// ObjectNode is pretty dumb !!!
|
||||
|
||||
// From super-class implementation
|
||||
final JsonSerializer<Object> ser = findTypedValueSerializer(cls, true, null);
|
||||
try {
|
||||
ser.serialize(value, gen, this); // ObjectNode
|
||||
} catch (Exception e) { // but wrap RuntimeExceptions, to get path information
|
||||
throw _wrapAsIOE(gen, e);
|
||||
}
|
||||
}
|
||||
????? .serialize(...)
|
||||
}
|
||||
|
||||
public abstract class DefaultSerializerProvider
|
||||
extends SerializerProvider
|
||||
implements java.io.Serializable // since 2.1; only because ObjectWriter needs it
|
||||
{
|
||||
...
|
||||
}
|
||||
|
||||
@!!! XmlMapper:164
|
||||
@ -1,4 +1,6 @@
|
||||
2020
|
||||
https://wearecommunity.io/events/java-community-meetup/talks/4593
|
||||
!!! need to look
|
||||
DanVega - Spring Boot Testing Basics: How to Unit Test & Integration Test REST Controllers of 15:03
|
||||
https://www.youtube.com/watch?v=pNiRNRgi5Ws
|
||||
KrisFoster - Spring Boot Testing a REST Controller with Unit, Integration & Acceptance Tests 0:00 of 25:46
|
||||
|
||||
@ -1,3 +0,0 @@
|
||||
2020
|
||||
https://keyholesoftware.com/2020/06/30/quick-start-spring-security-5-oauth2-login/
|
||||
https://www.baeldung.com/spring-security-oauth-attack-redirect
|
||||
@ -1,3 +1,8 @@
|
||||
2023
|
||||
https://spring.io/blog/2023/08/22/tackling-the-oauth2-client-component-model-in-spring-security
|
||||
2020
|
||||
https://keyholesoftware.com/2020/06/30/quick-start-spring-security-5-oauth2-login/
|
||||
https://www.baeldung.com/spring-security-oauth-attack-redirect
|
||||
2018
|
||||
https://dzone.com/articles/secure-spring-rest-with-spring-security-and-oauth2
|
||||
https://habr.com/ru/company/southbridge/blog/690978/
|
||||
|
||||
@ -1,5 +1,10 @@
|
||||
https://docs.spring.io/spring-authorization-server/docs/current/reference/html/index.html
|
||||
https://docs.spring.io/spring-authorization-server/docs/current/reference/html/getting-started.html
|
||||
|
||||
https://github.com/Baeldung/spring-security-oauth/tree/master/oauth-resource-server
|
||||
|
||||
2023
|
||||
|
||||
2021
|
||||
https://www.baeldung.com/spring-security-oauth-resource-server
|
||||
2018
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
2022
|
||||
2023
|
||||
https://www.baeldung.com/jbang-guide
|
||||
http://www.mastertheboss.com/java/java-scripting-with-jbang/
|
||||
2022
|
||||
http://www.mastertheboss.com/java/jbang-vs-jshell/
|
||||
|
||||
2
pl/java/tools/shell/jbang/docs/cheatsheet.txt
Обычный файл
2
pl/java/tools/shell/jbang/docs/cheatsheet.txt
Обычный файл
@ -0,0 +1,2 @@
|
||||
2021
|
||||
https://www.mastertheboss.com/java/jbang-cheatsheet-2021/
|
||||
@ -1,4 +1,6 @@
|
||||
https://learn.microsoft.com/en-us/dotnet/core/tools/
|
||||
https://github.com/dotnet/core
|
||||
https://github.com/dotnet/sdk/
|
||||
|
||||
extra
|
||||
mono
|
||||
|
||||
@ -1,8 +1,29 @@
|
||||
https://dotnet.microsoft.com/en-us/download
|
||||
|
||||
https://learn.microsoft.com/en-us/dotnet/core/install/
|
||||
https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual
|
||||
https://learn.microsoft.com/en-us/dotnet/core/install/linux-ubuntu
|
||||
https://learn.microsoft.com/en-us/dotnet/core/install/linux-scripted-manual
|
||||
https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-install-script
|
||||
!! intended mainly for CI
|
||||
|
||||
export DOTNET_ROOT=$HOME/.dotnet
|
||||
export PATH="$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools"
|
||||
|
||||
https://dotnet.microsoft.com/en-us/download/dotnet/scripts
|
||||
|
||||
|
||||
aur
|
||||
dotnet-sdk
|
||||
dotnet-host
|
||||
dotnet-runtime
|
||||
|
||||
./dotnet-install.sh
|
||||
-h|-?|--help
|
||||
--dry-run,-DryRun
|
||||
prints repeatable invocation with all params at the end
|
||||
--verbose,-Verbose
|
||||
... other stuff (os, arch, runtime, ...)
|
||||
-c LTS
|
||||
-i,--install-dir
|
||||
|
||||
./dotnet-install.sh -c LTS --verbose --dry-run
|
||||
|
||||
10
pl/ms/dotnet/tools/tools.txt
Обычный файл
10
pl/ms/dotnet/tools/tools.txt
Обычный файл
@ -0,0 +1,10 @@
|
||||
https://learn.microsoft.com/en-us/dotnet/core/tools/global-tools
|
||||
|
||||
dotnet tool
|
||||
search
|
||||
install
|
||||
-g <tool>
|
||||
update
|
||||
-g <tool>
|
||||
uninstall
|
||||
-g <tool>
|
||||
@ -4,4 +4,4 @@ https://github.com/rust-lang/regex
|
||||
|
||||
2023
|
||||
https://blog.burntsushi.net/regex-internals/
|
||||
https://habr.com/ru/articles/749730/
|
||||
https://habr.com/ru/articles/755940/
|
||||
|
||||
Загрузка…
x
Ссылка в новой задаче
Block a user